如何在 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

凭借我的基本 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