你不指定數據庫的時間數,所以我避免使用通用表格表達式可以使這個更清晰。它仍然可以清理一下。我做了我的SQL Server上工作2008
select rsTotalRepliesByCategory.Category,
TotalRepliesByCategory,
rsCategoryReplyCount.Reply,
rsMaxReplies.MaxReplies
from
(
--calc total replies
select Category, COUNT(*) as TotalRepliesByCategory
from CategoryReply
group by Category
) rsTotalRepliesByCategory
INNER JOIN
(
--calc number of replies by category and reply
select Category, Reply, COUNT(*) as CategoryReplyCount
from CategoryReply
group by Category, Reply
) rsCategoryReplyCount on rsCategoryReplyCount.Category = rsTotalRepliesByCategory.Category
INNER JOIN
(
--calc the max replies
select Category, MAX(CategoryReplyCount) as MaxReplies
from
(
select Category, Reply, COUNT(*) as CategoryReplyCount
from CategoryReply
group by Category, Reply
) rsCategoryReplyCount2
group by Category
) rsMaxReplies on rsMaxReplies.Category = rsTotalRepliesByCategory.Category and rsMaxReplies.MaxReplies = rsCategoryReplyCount.CategoryReplyCount
這裏是我以前玩的這個設置:
create table CategoryReply
(
Category char(1),
Reply int
)
insert into CategoryReply values ('M',1)
insert into CategoryReply values ('F',2)
insert into CategoryReply values ('M',1)
insert into CategoryReply values ('M',3)
insert into CategoryReply values ('M',1)
insert into CategoryReply values ('M',3)
insert into CategoryReply values ('F',2)
insert into CategoryReply values ('F',1)
insert into CategoryReply values ('F',2)
insert into CategoryReply values ('F',5)
insert into CategoryReply values ('F',2)
最後,輸出:
Category TotalRepliesByCategory Reply MaxReplies
F 6 2 4
M 5 1 3
什麼數據庫版? –
我正在使用OleDb連接從Excel工作表中獲取數據。但我使用正常的SQL查詢,他們工作 – Youssef