繁体   English   中英

如何在一行中获得总计和小计?

[英]How to get the grand total and the subtotal in one row?

这是预期的 output。

ID | GRAND_TOTAL | CHANNEL_1 | CHANNEL_2
1  | 100.00      | 50.00     | 50.00
2  | 500.00      | 100.00    | 400.00

但我的查询结果如下:

ID | GRAND_TOTAL | CHANNEL_1 | CHANNEL_2
1  | 100.00      | 50.00     | 0
2  | 100.00      | 0         | 50.00
1  | 500.00      | 100.00    | 0
2  | 500.00      | 0         | 400.00

这是我在查询中尝试的。

SELECT 
       ID, 
       SUM(Amount) AS GRAND_TOTAL,
       CASE WHEN CHANNEL_ID = 1 THEN AMOUNT ELSE 0 END CHANNEL_1,
       CASE WHEN CHANNEL_ID = 2 THEN AMOUNT ELSE 0 END CHANNEL_2
FROM
       CHANNEL_AMOUNT
GROUP BY
       ID, CHANNEL_ID, AMOUNT

看起来您只想按 Id 分组

SELECT 
       ID, 
       SUM(Amount) AS GRAND_TOTAL,
       SUM(CASE WHEN CHANNEL_ID = 1 THEN AMOUNT ELSE 0 END) CHANNEL_1,
       SUM(CASE WHEN CHANNEL_ID = 2 THEN AMOUNT ELSE 0 END) CHANNEL_2
FROM
       CHANNEL_AMOUNT
GROUP BY
       ID

GROUP BY ____的意思是“我希望每个 ____ 有一个结果行”。 您不希望每个 ID、渠道和金额有一个结果行,但每个 ID 只有一个结果行。 因此: GROUP BY id 然后你想要每个通道的总和,所以使用SUM

SELECT
  id,
  SUM(amount) AS grand_total,
  SUM(CASE WHEN channel_id = 1 THEN amount ELSE 0 END) AS channel_1,
  SUM(CASE WHEN channel_id = 2 THEN amount ELSE 0 END) AS channel_2
FROM channel_amount
GROUP BY id
ORDER BY id;

(In standard SQL this would be SUM(amount) FILTER (WHERE channel_id = 1) , but SQL Server doesn't feature the filter clause yet, so we use a case expression inside the aggregation function.)

你可以试试 GROUP BY ID。

SELECT 
   ID, 
   SUM(Amount) AS GRAND_TOTAL,
   CASE WHEN CHANNEL_ID = 1 THEN AMOUNT ELSE 0 END CHANNEL_1,
   CASE WHEN CHANNEL_ID = 2 THEN AMOUNT ELSE 0 END CHANNEL_2
FROM
   CHANNEL_AMOUNT
GROUP BY
   ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM