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

SQL Server多行转多列:相同ID多行合并为多列的SQL查询写法

SQL Server 同ID多行列转单行实现方案

实现思路

  • 先对相同ID的记录分组排序生成行号,最多保留前2条即可覆盖4个症状字段的输出需求,超出部分自动忽略
  • 采用条件聚合做列映射,比原生PIVOT语法性能更优,更适配50万行级别的大数据量场景
  • 无对应值的位置默认返回空字符串,可按需调整为NULL

完整SQL代码

WITH RankedSymptoms AS (
    SELECT 
        ID,
        SYMPTOM1,
        SYMPTOM2,
        -- 相同ID分组内生成行号,排序规则可根据业务需求调整
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY (SELECT 1)) AS rn
    FROM 你的实际表名 -- 替换为自己的表名
)
SELECT 
    ID,
    MAX(CASE WHEN rn = 1 THEN SYMPTOM1 ELSE '' END) AS SYMPTOM1,
    MAX(CASE WHEN rn = 1 THEN SYMPTOM2 ELSE '' END) AS SYMPTOM2,
    MAX(CASE WHEN rn = 2 THEN SYMPTOM1 ELSE '' END) AS SYMPTOM3,
    MAX(CASE WHEN rn = 2 THEN SYMPTOM2 ELSE '' END) AS SYMPTOM4
FROM RankedSymptoms
WHERE rn <= 2
GROUP BY ID

性能优化建议

  • 建议建立覆盖索引提升查询效率,无需回表扫描:CREATE NONCLUSTERED INDEX IX_表名_ID ON 你的实际表名 (ID) INCLUDE (SYMPTOM1, SYMPTOM2)
  • 如果有业务排序规则(比如按症状录入时间排序),将ORDER BY (SELECT 1)替换为对应排序字段即可,不影响整体执行性能

补充说明

如果需要无值位置返回NULL而非空字符串,删除CASE语句中的ELSE ''即可。如果后续需要扩展更多症状输出字段,只需增加CASE映射规则、调整rn的过滤阈值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:39:02