【发布时间】:2016-01-28 23:07:24
【问题描述】:
我有 4 个表,存储 4 种请求:休假 (TO)、会议 (MT)、PO 和旅行 (TR)。
我想统计过去 30 天内每个表中每种类型的请求总数:
SELECT [requestType], COUNT ([requestType]) As 'Count'
FROM [Timeoff]
WHERE [requestType] = 'TO' AND CAST([timeoffCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) GROUP BY [requestType]
UNION ALL
SELECT [requestType], COUNT ([requestType]) As 'Count'
FROM [Meeting]
WHERE [requestType] = 'MT' AND CAST([meetingCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) GROUP BY [requestType]
UNION ALL
SELECT [requestType], COUNT ([requestType]) As 'Count'
FROM [PO]
WHERE [requestType] = 'PO' AND CAST([poCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) GROUP BY [requestType]
UNION ALL
SELECT [requestType], COUNT ([requestType]) As 'Count'
FROM [Travel]
WHERE [requestType] = 'TR' AND CAST([travelCreatedTime] AS DATE) >= CAST(DateAdd(DAY,-30,Getdate()) AS DATE) GROUP BY [requestType]
问题是,如果计数为 0,那么它根本不会出现在结果中,例如,如果会议请求的计数 = 0,那么我只有这个结果:
我如何在结果中包含 0 值,所以我会有类似的东西(如果 Meeting MT count = 0):
requestType --- 计数
到 ------------- 30
MT ------------- 0
PO -------------19
TR -------------9
【问题讨论】:
-
为什么要编写 Group By 子句?我认为不需要作为我的书面解决方案
标签: sql sql-server join count aggregate-functions