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

SQL视图行转列实现:合并同维度数据展示水、能源余额

解决方案:合并同组数据为单行展示多维度BAL值

嘿,这个需求很容易实现,用SQL的条件聚合或者透视函数就能搞定,下面给你两种通用的方案,适配不同数据库环境:

方案一:条件聚合(兼容绝大多数数据库)

这种方法用CASE WHEN配合聚合函数(比如MAX或SUM),把不同INQDETAIL对应的BAL值转成单独的列,再通过GROUP BY合并相同分组的行。

SELECT
    ID,
    INQCLASS,
    Period,
    MAX(CASE WHEN INQDETAIL = 'water' THEN BAL END) AS Water_BAL,
    MAX(CASE WHEN INQDETAIL = 'Energy' THEN BAL END) AS Energy_BAL
FROM
    你的视图名称
GROUP BY
    ID, INQCLASS, Period;

说明:

  • GROUP BY ID, INQCLASS, Period:把这三个字段值完全相同的行归为一组
  • CASE WHEN:判断每行的INQDETAIL,匹配到对应类型就取出BAL值,否则返回NULL
  • MAX():因为每组里对应每个INQDETAIL只有一个有效BAL值,用MAX可以过滤掉NULL,保留有效数值(用SUM也能达到同样效果)

执行这个查询后,你会得到这样的结果:

1233 | GROSS | 12-3-2017 | 233.32 | 122.00

方案二:使用PIVOT透视函数(适用于支持该语法的数据库,如SQL Server、Oracle)

如果你的数据库支持PIVOT语法,可以更简洁地实现行转列:

SELECT
    ID,
    INQCLASS,
    Period,
    water AS Water_BAL,
    Energy AS Energy_BAL
FROM
    你的视图名称
PIVOT (
    MAX(BAL)
    FOR INQDETAIL IN (water, Energy)
) AS PivotTable;

说明:

  • PIVOT子句里指定聚合函数MAX(BAL),然后通过FOR INQDETAIL IN (water, Energy)把INQDETAIL的这两个值转成列名
  • 最后给透视后的结果起别名PivotTable,再选择需要的列即可

两种方案都能满足你的需求,你可以根据自己使用的数据库类型选择合适的方法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:25:52