带有 CASE 和 CAST DATE 的 SQL GROUP BY

问题描述 投票:0回答:1

我在 SQL 中有下面的源表,我想查询它以获取如下输出表,以获得按日期(不带时间)聚合的每个源的金额总和。不幸的是我的代码不起作用。

身份证 金额 来源 日期
1 10 来源1 2023-09-07 16:00:00
2 20 来源2 2023-09-07 19:00:00
3 30 来源1 2023-09-08 12:00:00
4 15 来源1 2023-09-09 11:00:00
5 12 来源2 2023-09-08 17:00:00
6 11 来源1 2023-09-07 14:00:00
7 18 来源2 2023-09-07 13:00:00

预期输出:

金额_来源1 金额_来源2 新日期
21 38 2023-09-07
30 12 2023-09-08
15 0 2023-09-09

我的代码:

SELECT CAST(Date AS DATE) as NewDate,
CASE WHEN Source = 'Source1'
 THEN Amount
END AS Amount_Source1
CASE WHEN Source = 'Source2'
 THEN Amount
END AS Amount_Source2
GROUP BY CAST(Date AS DATE), Amount, Source
sql sql-server group-by case
1个回答
0
投票

正如其他人所说,您缺少

SUM
功能。以下代码应该符合您的预期:

SELECT CAST(Date AS DATE) as NewDate,
    SUM(CASE WHEN Source = 'Source1'
         THEN Amount
         END) AS Amount_Source1
    SUM(CASE WHEN Source = 'Source2'
         THEN Amount
         END) AS Amount_Source2
GROUP BY CAST(Date AS DATE)

使用

GROUP BY
时,重要的是要了解它的目的是指示 SQL 如何聚合数据。

© www.soinside.com 2019 - 2024. All rights reserved.