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

如何在SQL(Coginity)中将单列转置为唯一成员表

在Coginity SQL中实现行转列(Month字段转置为列)

原始数据

Mem IDMonthTotal
Mem 1Jan20
Mem 1Feb30
Mem 1Mra20
Mem 1April40
Mem 2Jan20
Mem 2Feb30
Mem 2Mra20
Mem 2April40

注:原始数据中Mra应为Mar(三月),以下SQL会按原始拼写处理,若已修正则对应调整条件即可。

期望结果

Mem IDJanFebMarApril
Mem 120302040
Mem 220302040

注:你提供的期望结果中Mem 3应为Mem 2,属于笔误。


解决方案

方法1:CASE WHEN + 聚合函数(通用兼容写法)

这是所有SQL数据库都支持的通用行转列写法,Coginity完全适用。通过CASE匹配每个Month值,结合聚合函数(SUM或MAX,因每个Mem ID+Month组合唯一,两者效果一致)提取对应列的数据:

SELECT
    "Mem ID",
    SUM(CASE WHEN "Month" = 'Jan' THEN "Total" ELSE 0 END) AS Jan,
    SUM(CASE WHEN "Month" = 'Feb' THEN "Total" ELSE 0 END) AS Feb,
    SUM(CASE WHEN "Month" = 'Mra' THEN "Total" ELSE 0 END) AS Mar,
    SUM(CASE WHEN "Month" = 'April' THEN "Total" ELSE 0 END) AS April
FROM
    your_table_name -- 替换为你的实际表名
GROUP BY
    "Mem ID"
ORDER BY
    "Mem ID";

若确认每个Mem ID对应Month只有一条记录,用MAX替代SUM更直观:

SELECT
    "Mem ID",
    MAX(CASE WHEN "Month" = 'Jan' THEN "Total" END) AS Jan,
    MAX(CASE WHEN "Month" = 'Feb' THEN "Total" END) AS Feb,
    MAX(CASE WHEN "Month" = 'Mra' THEN "Total" END) AS Mar,
    MAX(CASE WHEN "Month" = 'April' THEN "Total" END) AS April
FROM
    your_table_name
GROUP BY
    "Mem ID"
ORDER BY
    "Mem ID";

方法2:PIVOT函数(若Coginity支持)

如果Coginity兼容ANSI SQL的PIVOT语法,可使用更简洁的写法:

SELECT
    "Mem ID",
    Jan,
    Feb,
    Mar,
    April
FROM
    your_table_name
PIVOT (
    SUM("Total") -- 或MAX("Total")
    FOR "Month" IN ('Jan' AS Jan, 'Feb' AS Feb, 'Mra' AS Mar, 'April' AS April)
) AS pivot_table
ORDER BY
    "Mem ID";

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:25:33