使用分组的一个SQL查询中的多个计数
我想运行一个查询,以获得按年份和月份分组的未结事件和已结事件的计数,下面的查询在没有分组的情况下可以正常工作,但一旦我添加了组,它将无法工作使用分组的一个SQL查询中的多个计数,sql,count,group-by,Sql,Count,Group By,我想运行一个查询,以获得按年份和月份分组的未结事件和已结事件的计数,下面的查询在没有分组的情况下可以正常工作,但一旦我添加了组,它将无法工作 SELECT (SELECT COUNT(*) AS Opened FROM Incidents) AS Total (SELECT COUNT(*) AS Solved FROM Incidents WHERE (MONTH(Closedate)=MONTH(Opendate))) AS Solved GROUP BY YEAR(Inci
SELECT (SELECT COUNT(*) AS Opened FROM Incidents) AS Total
(SELECT COUNT(*) AS Solved FROM Incidents WHERE (MONTH(Closedate)=MONTH(Opendate))) AS Solved
GROUP BY YEAR(Incidents.Opendate)
尝试:
可以将单个SELECT语句与大小写表达式一起使用
SELECT YEAR(Incidents.Opendate) AS [Year],
MONTH(Incidents.Opendate) AS [Month],
COUNT(*) AS Total,
SUM(CASE WHEN MONTH(Closedate) = MONTH(Opendate) THEN 1 ELSE 0 END) AS Solved
FROM Incidents
GROUP BY YEAR(Incidents.Opendate), MONTH(Incidents.Opendate)
我已经设法解决了这个问题,下面是问题
select COUNT(CASE WHEN Month(Closedate)=Month(Opendate) then 1 else null end) AS closed,COUNT(*) AS Opened
from incidents
Group by Year(Opendate), Month(Opendate)
Order by Year(Opendate), Month(Opendate)
Shree,上面的查询不起作用。我得到了这个错误(Msg 156,级别15,状态1,第3行关键字“as”附近的语法不正确)。您可能可以省略
else null
位。我认为大多数SQL产品都允许这样做,将缺少的ELSE
子句默认为ELSE NULL
。然而,这与@Alexander Fedorenko的答案本质上不一样吗?
select COUNT(CASE WHEN Month(Closedate)=Month(Opendate) then 1 else null end) AS closed,COUNT(*) AS Opened
from incidents
Group by Year(Opendate), Month(Opendate)
Order by Year(Opendate), Month(Opendate)