Sql 按多个列分组,所有列的计数均为0
我有一个查询,如果在group by上找不到记录,它必须返回计数0。但我得到的是空洞的结果Sql 按多个列分组,所有列的计数均为0,sql,sql-server,group-by,aggregate,Sql,Sql Server,Group By,Aggregate,我有一个查询,如果在group by上找不到记录,它必须返回计数0。但我得到的是空洞的结果 SELECT DATEPART(YEAR, s.CreatedAt) AS 'Year',DATEPART(MONTH, s.CreatedAt) AS 'Month', count(*) AS 'count' FROM table1 t1 JOIN table2 t2 on t1.id = t2.id WHERE t1.Id IN ( SELECT id FROM table3 WHERE Id IN
SELECT DATEPART(YEAR, s.CreatedAt) AS 'Year',DATEPART(MONTH, s.CreatedAt) AS
'Month', count(*) AS 'count'
FROM table1 t1
JOIN table2 t2 on t1.id = t2.id
WHERE t1.Id IN (
SELECT id FROM table3 WHERE Id IN (
SELECT id FROM table4 WHERE Gradingresult LIKE '%abcd%'
GROUP BY id
)) AND t1.column1 LIKE 'hello' AND t1.column2='world' AND t2.column1 !=
'somestring'
AND t1.CreatedAt BETWEEN DATEADD(YEAR, -1, GETDATE()) AND GETDATE()
GROUP BY DATEPART(YEAR, t1.CreatedAt), DATEPART(MONTH, t1.CreatedAt)
我希望它像下面这样显示
year month count
2019 2 0
2019 4 0
2018 7 0
但我得到的结果如下
year month count
这里什么都没有,没有行
我尝试过不同的方法,如case语句、isnull()、left join和其他方法,但都没有得到想要的结果
编辑
我也考虑过这一年
更新了我的实际查询,如果我没有包括t2。column1条件,我得到的结果如下
year month count
2019 5 10
2019 4 25
2019 2 9
2018 10 19
如果我包含上述指定条件,我将获得所需的结果如果表中没有行,则结果集中没有行。您可以使用
左联接
获取所需的行:
select v.mon, count(t.createdat)
from (values (2), (4), (7)) v(mon) left join
tableT t
on month(t.createdat) = v.mon
group by v.mon
order by v.mon;
你需要非常小心地使用这个公式,因为你没有包括年份。处理月份时,通常也应考虑年份。有一个返回1-12的帮助表(或递归cte)。外部连接。可能是@jarlh的副本,使用cte,我能够实现它。我也在考虑年份,但我没有在问题中指定,但仍然是空的result@JyothiPrakash . . . 这不能返回带有
左联接的空结果。感谢您根据您的建议进行了一些修改后,它工作了