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

MySQL透视表(交叉表)生成结果不符,求正确实现方案

修正后的MySQL透视表SQL

原SQL仅对每行数据做列拆分,未处理同一机器类型下同优先级的多行问题,导致结果无法对齐成目标表格格式。要实现预期交叉表,需先给每个机器类型+优先级的问题组分配行号,再按行号分组聚合,将对应行的各优先级问题整合到同一行。

修正后的SQL语句:

SELECT 
    machtype AS `Mach Name`,
    MAX(CASE WHEN priors = '5' THEN problems ELSE NULL END) AS `5`,
    MAX(CASE WHEN priors = '4' THEN problems ELSE NULL END) AS `4`,
    MAX(CASE WHEN priors = '3' THEN problems ELSE NULL END) AS `3`,
    MAX(CASE WHEN priors = '2' THEN problems ELSE NULL END) AS `2`,
    MAX(CASE WHEN priors = '1' THEN problems ELSE NULL END) AS `1`
FROM (
    SELECT 
        machtype,
        priors,
        problems,
        ROW_NUMBER() OVER (PARTITION BY machtype, priors ORDER BY problems) AS rn
    FROM priority
) AS sub
GROUP BY machtype, rn
ORDER BY machtype, rn;

核心逻辑说明:

  1. 子查询通过ROW_NUMBER() OVER (PARTITION BY machtype, priors ORDER BY problems),为每个机器类型下的同优先级问题分配行号,确保同一优先级的多个问题能按顺序对应到不同行。
  2. 外层查询按机器类型和行号分组,用MAX()聚合函数提取对应行号、对应优先级的问题——同一分组内每个优先级列仅存在一个非空值,MAX会自动取该值,空值则保留为NULL。
  3. 最终结果按机器类型和行号排序,与目标表格结构完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:47:26