如何在 sql 中转换 table 并对金额求和?
How to pivot a table in sql and sum the amounts?
我有一个叫 test_table 的 table。 table 如下所示
id
type
value
1
tax
10
1
premium
21
1
tax
3
1
correction
4.5
2
premium
15
我想“旋转”这个 table 并使其看起来像下面这样
id
premium
tax
correction
1
21
13 (=10+3)
4.5
2
15
NULL
NULL
- 按类型创建列(保费、税收和更正)
- 按类型和 ID 对金额求和
凭借我的基本 sql 知识,我不知道如何构建此查询。你能帮我解决这个问题吗?
您可以尝试以下数据透视查询:
SELECT
id,
SUM(CASE WHEN type = 'premium' THEN value ELSE 0 END) AS premium,
SUM(CASE WHEN type = 'tax' THEN value ELSE 0 END) AS tax
SUM(CASE WHEN type = 'correction' THEN value ELSE 0 END) AS correction
FROM yourTable
GROUP BY id
ORDER BY id;
请注意,对于那些在源 table 中有条目的单元格,以上将报告零。
在 MS Sql 服务器中,PIVOT 语法应该足够了。
select *
from (
select id, [type], value
from test_table
) src
pivot (
sum(value)
for [type] in ([premium], [tax], [correction])
) pvt
order by id
我有一个叫 test_table 的 table。 table 如下所示
id | type | value |
---|---|---|
1 | tax | 10 |
1 | premium | 21 |
1 | tax | 3 |
1 | correction | 4.5 |
2 | premium | 15 |
我想“旋转”这个 table 并使其看起来像下面这样
id | premium | tax | correction |
---|---|---|---|
1 | 21 | 13 (=10+3) | 4.5 |
2 | 15 | NULL | NULL |
- 按类型创建列(保费、税收和更正)
- 按类型和 ID 对金额求和
凭借我的基本 sql 知识,我不知道如何构建此查询。你能帮我解决这个问题吗?
您可以尝试以下数据透视查询:
SELECT
id,
SUM(CASE WHEN type = 'premium' THEN value ELSE 0 END) AS premium,
SUM(CASE WHEN type = 'tax' THEN value ELSE 0 END) AS tax
SUM(CASE WHEN type = 'correction' THEN value ELSE 0 END) AS correction
FROM yourTable
GROUP BY id
ORDER BY id;
请注意,对于那些在源 table 中有条目的单元格,以上将报告零。
在 MS Sql 服务器中,PIVOT 语法应该足够了。
select *
from (
select id, [type], value
from test_table
) src
pivot (
sum(value)
for [type] in ([premium], [tax], [correction])
) pvt
order by id