我在 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
正如其他人所说,您缺少
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 如何聚合数据。