【发布时间】:2019-09-09 12:11:22
【问题描述】:
我有一个查询,如果在 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 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
如果我包含上述指定条件,我应该得到想要的结果
【问题讨论】:
-
有一个帮助表(或递归 cte)返回 1 - 12。外连接。
-
@jarlh,有了 cte,我可以实现它。
标签: sql sql-server group-by aggregate