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

如何使用CASE语句将指定数据中shortname的汇总从行转列?

用CASE语句实现Shortname汇总结果的列展示(行转列)

这其实是SQL里很常见的行转列需求,用CASE语句配合聚合函数就能轻松实现,我给你一步步拆解说明:

核心思路

我们需要针对每个shortname的具体取值,用CASE语句创建对应的专属列,再通过聚合函数(比如SUM、COUNT)把该shortname下的数值汇总到对应列中,最后按业务需求的维度分组(如果不需要分组就去掉GROUP BY)。

示例代码(静态场景)

假设你的表名为data_table,包含要汇总的数值列(比如amount)、shortname列,还有可能的分组维度(比如category或record_date)。

带分组维度的情况

如果需要按某个维度(比如category)分组展示各shortname的汇总结果:

SELECT
  category, -- 替换成你实际的分组字段,不需要的话直接删除这行
  SUM(CASE WHEN shortname = 'SHT_A' THEN amount ELSE 0 END) AS SHT_A_total,
  SUM(CASE WHEN shortname = 'SHT_B' THEN amount ELSE 0 END) AS SHT_B_total,
  SUM(CASE WHEN shortname = 'SHT_C' THEN amount ELSE 0 END) AS SHT_C_total
  -- 有更多shortname取值就继续添加对应的CASE语句
FROM data_table
GROUP BY category;

无分组维度的情况

如果只需要汇总全表所有行的结果:

SELECT
  SUM(CASE WHEN shortname = 'SHT_A' THEN amount ELSE 0 END) AS SHT_A_total,
  SUM(CASE WHEN shortname = 'SHT_B' THEN amount ELSE 0 END) AS SHT_B_total,
  SUM(CASE WHEN shortname = 'SHT_C' THEN amount ELSE 0 END) AS SHT_C_total
FROM data_table;

细节补充

  • 如果你需要的是计数统计而非求和,把SUM换成COUNT即可,CASE语句还能简化:
    COUNT(CASE WHEN shortname = 'SHT_A' THEN 1 END) AS SHT_A_count
    
    (因为COUNT会忽略NULL值,不符合条件时CASE返回NULL,不会被计入统计)
  • 代码里的SHT_A、SHT_B要替换成你实际的shortname取值,每个不同的取值都要对应一条CASE语句。
  • 如果你的shortname取值是动态变化的(无法提前枚举),静态CASE写法就不太适用了,这时候可以考虑用动态SQL自动生成CASE语句,或者使用数据库自带的PIVOT函数(不同数据库语法略有差异,比如SQL Server的PIVOT、MySQL的动态拼接)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:52:33