Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用分组的一个SQL查询中的多个计数_Sql_Count_Group By - Fatal编程技术网

使用分组的一个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)