我有一个查询,如果在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(),左联接和其他方法,但无法获得预期的结果
编辑 我也考虑过一年 我已更新了实际查询,如果不包含 t2.column1 条件,我将获得低于结果的结果
year month count
2019 5 10
2019 4 25
2019 2 9
2018 10 19
如果我包含上述指定条件,我应该得到预期的结果
答案 0 :(得分:0)
如果表中没有行,则结果集中没有行。您可以使用left join
来获取所需的行:
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;
在使用此表述时,您需要非常小心,因为您没有包括年份。在使用几个月时,通常也应该考虑年份。