You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中实现行转列(Pivot)查询的技术需求

行转列(月份字段转列)解决方案

原始数据

PolicyNoMonthAmount
123Aug-23100
456sep-23150

期望输出

PolicyNoAug-23sep-23
1231000
4560150

1. 通用CASE WHEN写法(兼容多数数据库)

这种写法适用于MySQL、PostgreSQL、SQL Server等绝大多数数据库,兼容性拉满:

SELECT
    PolicyNo,
    SUM(CASE WHEN Month = 'Aug-23' THEN Amount ELSE 0 END) AS `Aug-23`,
    SUM(CASE WHEN Month = 'sep-23' THEN Amount ELSE 0 END) AS `sep-23`
FROM
    your_table_name
GROUP BY
    PolicyNo;

核心逻辑:用CASE WHEN匹配每条记录的月份,命中目标月份就取对应金额,否则返回0;最后按PolicyNo聚合,得到每个保单号的各月份金额。

2. PIVOT函数写法(以SQL Server为例)

如果用的是支持PIVOT的数据库(如SQL Server、Oracle),可以用更简洁的语法:

SELECT
    PolicyNo,
    ISNULL([Aug-23], 0) AS `Aug-23`,
    ISNULL([sep-23], 0) AS `sep-23`
FROM
    your_table_name
PIVOT
(
    SUM(Amount)
    FOR Month IN ([Aug-23], [sep-23])
) AS PivotTable;

核心逻辑:PIVOT直接将Month字段的取值转为列,通过SUM聚合金额(单条记录下SUM/MAX/MIN效果一致);用ISNULL把无匹配值的NULL替换为0。

注意事项

  • 把代码里的your_table_name替换成你实际使用的表名
  • 如果后续会新增月份,静态写法需要手动修改,这种场景建议用动态SQL自动生成列名

内容的提问来源于stack exchange,提问作者lobh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:53:18