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

MS SQL调查表行转列问题:PIVOT出NULL/CASE仅一行求助

MS SQL 调查数据行转列解决方案

问题分析

现有调查数据表结构如下:

Questionanswergroupenterprise
1softcame2022-09-01softcame
2edgar2022-09-01softcame
512022-09-01softcame
612022-09-01softcame
3Si2022-09-01softcame
4SI2022-09-01softcame
1softcame america2022-09-01softcame america
2edgar 22022-09-01softcame america
522022-09-01softcame america
622022-09-01softcame america
3No2022-09-01softcame america
4No2022-09-01softcame america
1softcame norte2022-09-01softcame norte
2edgar 32022-09-01softcame norte
532022-09-01softcame norte
632022-09-01softcame norte
3Si2022-09-01softcame norte
4No2022-09-01softcame norte

需求是将Question字段转为列,answer作为对应列的值,最终按enterprise分组输出结果。

原代码错误点

  1. PIVOT语句错误:

    • 引用不存在的字段no_pregunta,实际应为Question
    • 查询条件中日期格式'01/09/2022'与表中存储的2022-09-01格式不匹配,导致过滤错误
    • 未指定按enterprise分组,多余的GROUP BY子句破坏了分组逻辑
  2. CASE+GROUP BY语句错误:

    • 子查询中字段拼写错误(grpup应为group)
    • GROUP BY仅包含group,未加入enterprise,导致同一分组下的所有企业结果被合并为一行

正确解决方案

方案一:使用PIVOT实现行转列

修正字段名、日期格式,并按enterprise保留分组:

SELECT 
    enterprise,
    [1], [2], [3], [4], [5], [6]
FROM (
    SELECT 
        enterprise,
        Question,
        answer
    FROM Respuestas_Encuestas_Todas
    WHERE survey = 'SurveName' 
      AND [group] = '2022-09-01' -- group是SQL关键字,需加方括号包裹,日期格式与表中保持一致
) AS SourceData
PIVOT (
    MAX(answer) -- 用MAX聚合确保每个Question对应唯一answer
    FOR Question IN ([1], [2], [3], [4], [5], [6])
) AS PivotTable;

方案二:使用CASE+GROUP BY实现行转列

修正拼写错误,将enterprise加入GROUP BY子句:

SELECT 
    enterprise,
    MAX(CASE WHEN Question = 1 THEN answer END) AS [1],
    MAX(CASE WHEN Question = 2 THEN answer END) AS [2],
    MAX(CASE WHEN Question = 3 THEN answer END) AS [3],
    MAX(CASE WHEN Question = 4 THEN answer END) AS [4],
    MAX(CASE WHEN Question = 5 THEN answer END) AS [5],
    MAX(CASE WHEN Question = 6 THEN answer END) AS [6]
FROM Respuestas_Encuestas_Todas
WHERE survey = 'survey name' 
  AND [group] = '2022-09-01'
GROUP BY enterprise, [group]; -- 同时按enterprise和group分组,确保结果准确

说明

  • 两个方案都会输出3行结果,对应3个enterprise的调查数据
  • group是SQL关键字,查询时必须用方括号[group]包裹避免语法错误
  • 日期格式需与表中存储的YYYY-MM-DD保持一致,否则会过滤不到目标数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:03:30