PostgreSQL行合并问题:多行转宽表格式实现求助
解决行转列(Pivot)需求:将多行合并为单行
这是个非常常见的行转列场景,你已经找对了核心方向——按date和district分组,接下来只需要用条件聚合就能把不同type对应的area映射成单独的列,我给你具体实现方案:
核心实现代码(静态列)
假设你的type字段只有type1和type2两种固定取值,直接用CASE WHEN配合聚合函数即可:
SELECT date, -- 提取type1对应的area值 MAX(CASE WHEN type = 'type1' THEN area END) AS type1_area, -- 提取type2对应的area值 MAX(CASE WHEN type = 'type2' THEN area END) AS type2_area, district FROM your_table_name -- 替换成你的实际表名 GROUP BY date, district ORDER BY date, district;
关键细节说明
- 为什么用
MAX?因为分组后,每个date + district组合下,同一个type应该只会对应一条area记录(如果有重复,MAX会自动忽略NULL值,取有效的那个值)。如果你的area是数值类型,用SUM也能达到同样效果;如果是字符串类型,MAX/MIN都适用,只要每个分组下每个type唯一对应一个area就行。 - 如果你的
type取值不固定(比如可能新增type3、type4),那需要用动态SQL来生成列,但从你描述的输出格式来看,应该是固定的type1和type2,静态写法就足够了。
内容的提问来源于stack exchange,提问作者wadadaaa
相关产品推荐
相关产品推荐

