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

SQL Server如何对Comments表行转列生成指定格式透视表

SQL实现Comments表转固定20列透视表方案

核心实现逻辑

  • 先对每个NCC_CLTID分组内的记录按顺序生成1-20的序号
  • 再通过条件聚合按序号映射为TYPE1到TYPE20列,无对应值的位置自动返回NULL

通用写法(兼容MySQL8.0+、PostgreSQL、SQL Server、Oracle等支持窗口函数的数据库)

SELECT
    NCC_CLTID,
    MAX(CASE WHEN rn = 1 THEN NCC_CTYPE END) AS TYPE1,
    MAX(CASE WHEN rn = 2 THEN NCC_CTYPE END) AS TYPE2,
    MAX(CASE WHEN rn = 3 THEN NCC_CTYPE END) AS TYPE3,
    MAX(CASE WHEN rn = 4 THEN NCC_CTYPE END) AS TYPE4,
    MAX(CASE WHEN rn = 5 THEN NCC_CTYPE END) AS TYPE5,
    MAX(CASE WHEN rn = 6 THEN NCC_CTYPE END) AS TYPE6,
    MAX(CASE WHEN rn = 7 THEN NCC_CTYPE END) AS TYPE7,
    MAX(CASE WHEN rn = 8 THEN NCC_CTYPE END) AS TYPE8,
    MAX(CASE WHEN rn = 9 THEN NCC_CTYPE END) AS TYPE9,
    MAX(CASE WHEN rn = 10 THEN NCC_CTYPE END) AS TYPE10,
    MAX(CASE WHEN rn = 11 THEN NCC_CTYPE END) AS TYPE11,
    MAX(CASE WHEN rn = 12 THEN NCC_CTYPE END) AS TYPE12,
    MAX(CASE WHEN rn = 13 THEN NCC_CTYPE END) AS TYPE13,
    MAX(CASE WHEN rn = 14 THEN NCC_CTYPE END) AS TYPE14,
    MAX(CASE WHEN rn = 15 THEN NCC_CTYPE END) AS TYPE15,
    MAX(CASE WHEN rn = 16 THEN NCC_CTYPE END) AS TYPE16,
    MAX(CASE WHEN rn = 17 THEN NCC_CTYPE END) AS TYPE17,
    MAX(CASE WHEN rn = 18 THEN NCC_CTYPE END) AS TYPE18,
    MAX(CASE WHEN rn = 19 THEN NCC_CTYPE END) AS TYPE19,
    MAX(CASE WHEN rn = 20 THEN NCC_CTYPE END) AS TYPE20
FROM (
    SELECT 
        NCC_CLTID,
        NCC_CTYPE,
        ROW_NUMBER() OVER (
            PARTITION BY NCC_CLTID 
            ORDER BY (SELECT 1) -- 若有指定排序字段(如创建时间)可替换此处保证顺序
        ) AS rn
    FROM Comments
) t
GROUP BY NCC_CLTID;

MySQL5.x适配写法(不支持窗口函数场景)

SELECT
    NCC_CLTID,
    MAX(CASE WHEN rn = 1 THEN NCC_CTYPE END) AS TYPE1,
    MAX(CASE WHEN rn = 2 THEN NCC_CTYPE END) AS TYPE2,
    -- 后续TYPE3到TYPE20写法和上述通用写法一致,此处省略重复部分
    MAX(CASE WHEN rn = 20 THEN NCC_CTYPE END) AS TYPE20
FROM (
    SELECT 
        NCC_CLTID,
        NCC_CTYPE,
        @rn := IF(@pre_cltid = NCC_CLTID, @rn + 1, 1) AS rn,
        @pre_cltid := NCC_CLTID
    FROM Comments, (SELECT @rn := 0, @pre_cltid := '') AS init
    ORDER BY NCC_CLTID -- 若有其他排序要求可补充排序字段
) t
GROUP BY NCC_CLTID;

内容的提问来源于stack exchange,提问作者Pedro Emilio Vélez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:45:05