小计和SQL

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'(之后可以通过查找和替换来修复),但它不按数量顺序排序.

编辑:请随意发布不解决排序的答案.一些答案实际上对我很有帮助.

Adr*_*der 5

看看像

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)