Shm*_*nix -1 sql sql-server sql-server-2008
I have a query:
SELECT Store_Number, COALESCE (COUNT(Invoice_Number), 0) AS abc
FROM Invoice_Detail_Tb
WHERE (Invoice_Date BETWEEN @start AND @end) AND (Invoice_Detail_Code IN ('abc'))
GROUP BY Store_Number
Run Code Online (Sandbox Code Playgroud)
它正在回归:
Store Number ABC
1 1
3 23
4 24
5 7
Run Code Online (Sandbox Code Playgroud)
我希望它能回归:
Store Number ABC
1 1
2 0
3 23
4 24
5 7
Run Code Online (Sandbox Code Playgroud)
我假设是因为我的"Group By".我怎么能做到这一点?
最简单的方法...如果有效...是使用条件聚合而不是where子句.因此,如果所有商店都在数据中,但他们可能没有"abc",那么
SELECT Store_Number, SUM(Invoice_Detail_Code = 'abc' THEN 1 ELSE 0 END) AS abc
FROM Invoice_Detail_Tb
WHERE Invoice_Date BETWEEN @start AND @end
GROUP BY Store_Number;
Run Code Online (Sandbox Code Playgroud)
一种更一致地工作的方法假设您有一个Stores带有ll个存储的表.那你只需要一个LEFT OUTER JOIN:
SELECT s.Store_Number, COUNT(id.Store_Number) AS abc
FROM Stores s LEFT OUTER JOIN
Invoice_Detail_Tb id
ON s.Store_Number = id.Store_Number AND
id.Invoice_Date BETWEEN @start AND @end AND
id.Invoice_Number = 'abc'
GROUP BY s.Store_Number;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |