not*_*oop 1 sql sql-server union group-by
我有一个销售数据的SQL表(如下所示),我如何生成一个内联小计的结果集,并按照付费最高的客户的降序对结果进行排序?
所以给出如下表:
CUS_ID | PRODUCT | AMOUNT
12 | A | 2.50
12 | B | 5.80
24 | A | 10.00
24 | B | 30.00
Run Code Online (Sandbox Code Playgroud)
我会得到以下结果:
CUS_ID | Product | AMOUNT
24 | A | 10.00
24 | B | 30.00
24 | Total | 30.00
12 | A | 2.50
12 | B | 5.00
12 | Total | 7.50
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以带来以下查询:
SELECT cus_id, product, amount FROM Sales
UNION ALL
(SELECT cus_id, 'ZZZZ' AS product, SUM(amount) FROM Sales GROUP BY cus_id)
ORDER BY cus_id, product
Run Code Online (Sandbox Code Playgroud)
但是,查询使用'ZZZZ'而不是'Total'(之后可以通过查找和替换来修复),但它不按数量顺序排序.
编辑:请随意发布不解决排序的答案.一些答案实际上对我很有帮助.
看看像
DECLARE @Sales TABLE(
CUS_ID INT,
PRODUCT VARCHAR(20),
AMOUNT FLOAT
)
INSERT INTO @Sales SELECT 12,'A', 2.50
INSERT INTO @Sales SELECT 12,'B', 5.80
INSERT INTO @Sales SELECT 24,'A', 10.00
INSERT INTO @Sales SELECT 24,'B', 30.00
;WITH Vals AS (
SELECT cus_id,
product,
amount,
1 DisplayOrder,
SUM(amount) OVER(PARTITION BY cus_id) OrderTotal
FROM @Sales
UNION ALL
SELECT cus_id,
'Total' AS product,
SUM(amount),
2 DisplayOrder,
SUM(amount)
FROM @Sales
GROUP BY cus_id
)
SELECT cus_id,
product,
amount
FROM Vals
ORDER BY OrderTotal DESC,cus_id,DisplayOrder, product
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17746 次 |
| 最近记录: |