【发布时间】:2019-10-09 05:45:45
【问题描述】:
我正在使用 SQL Server 2008 R2 并对包含 CustomerID、OrderAmount、RegionID 的表进行分析。我需要根据每个区域的 OrderAmount 统计不同类别的订单数量。如果该类别中没有销售额,则返回 0。
Sample of data:
CustomerID | OrderAmount | RegionID
10001 | 50 | 801
10002 | 25 | 801
10003 | 200 | 802
10001 | 100 | 802
10002 | 20 | 802
...
And my expected result is:
RegionID | CategoryID | Num_of_Sales
801 | 1 | 2 -----Below 100
801 | 2 | 0 -----100-200
802 | 1 | 2 -----Below 100
802 | 2 | 1 -----100-200
...
我的问题是: 1. 为空的类别如何返回0? 2.有没有更好的代码写法?(不使用UNION)
WITH Category1 AS(
SELECT * FROM Sales_Table
WHERE NewAmount <= 100
)
, Category2 AS(
SELECT * FROM Sales_Table
WHERE NewAmount BETWEEN 101 AND 200
)
, [...]
SELECT Region_ID, CategoryID, Num_of_Sales
FROM (
SELECT Region_ID, COUNT(*) AS [Num_of_Sales], 1 AS CategoryID
FROM Category1
GROUP BY Region_ID
UNION
SELECT Region_ID, COUNT(*) AS [Num_of_Sales], 2 AS CategoryID
FROM Category2
GROUP BY Region_ID
UNION
[...]
)z
ORDER BY Region_ID, CategoryID
所以,我使用这些代码并得到了我的结果,但计数在 801 区域的 100-200 类别上没有返回 0。
【问题讨论】:
标签: sql-server sql-server-2008-r2