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

SQL行转列实现:按KlientId合并问卷评估数据生成宽表

SQL行转列实现问卷评估结果宽表输出

需求背景

  • 现有5表逐级关联查询返回长表格式结果:Client、Person、Process、AssessmentDF、CriteriaDF通过外键关联,筛选条件为评估名称匹配RightAssessmentName、评估日期在近180天内
  • 长表字段包含客户ID、姓氏、名字、生日、指标名称(CriteriaName)、指标结果(Result),同一客户的不同评估指标分多行存储
  • 目标输出宽表格式:将固定取值为IF1~IF19的指标名称转为独立列,同一客户的所有指标结果合并为单行,对应列填充匹配的指标结果值

实现代码(适配SQL Server环境,与现有语法兼容)

SELECT 
    Id,
    Name1,
    Name2,
    Birthday,
    IF1, IF2, IF3, IF4, IF5, IF6, IF7, IF8, IF9, IF10,
    IF11, IF12, IF13, IF14, IF15, IF16, IF17, IF18, IF19
FROM (
    -- 原有优化后的多表关联查询作为数据源
    SELECT 
        t1.Id, 
        t2.Name1, 
        t2.Name2, 
        t2.Birthday, 
        t5.CriteriaName, 
        t5.Result
    FROM Client AS t1
    INNER JOIN Person AS t2 ON t1.PersonId = t2.Id
    INNER JOIN Process AS t3 ON t1.Id = t3.ClientId
    INNER JOIN AssessmentDF AS t4 ON t3.Id = t4.ProcessId
    INNER JOIN CriteriaDF AS t5 ON t4.Id = t5.AssessmentDfId
    WHERE t4.Bezeichnung = 'RightAssessmentName' 
      AND t4.Date > DATEADD(day, -180, GETDATE())
) AS SourceData
PIVOT (
    -- 单客户单指标仅对应一个结果,MAX/MIN聚合均可正确取值
    MAX(Result)
    FOR CriteriaName IN (
        IF1, IF2, IF3, IF4, IF5, IF6, IF7, IF8, IF9, IF10,
        IF11, IF12, IF13, IF14, IF15, IF16, IF17, IF18, IF19
    )
) AS PivotResult

注意事项

  • 由于业务中CriteriaName取值固定为IF1至IF19,无需使用动态SQL拼接列,该写法执行效率更高、可维护性更强
  • 若某客户缺失对应指标的答题结果,对应列默认返回NULL,可通过ISNULL(IF1, '未填写') AS IF1的写法自定义空值展示内容
  • 后续若新增评估指标,只需同步在外层SELECT字段列表、PIVOT的IN指标列表中添加对应指标名即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:06:26