如何将行透视为列 MySQL

Ada*_*dam 12 mysql pivot

一直在寻找将行 (progress_check) 转换为列检查 1、检查 2 等......不需要总和或总数,只是希望显示结果......任何人都可以帮忙,谢谢广告

这是MYSQL中的表(成绩)

希望能得到这样的东西!

Ray*_*and 10

GROUP BY 并使用 MAX 或 SUM 是最常用的标准枢轴方式。

SELECT 
   results.sims_id
 , results.subject 
 , MAX(CASE WHEN results.progress_check = "C1" THEN results.result END) "C1"
 , MAX(CASE WHEN results.progress_check = "C2" THEN results.result END) "C2"
 , MAX(CASE WHEN results.progress_check = "C3" THEN results.result END) "C3"
FROM 
 results
GROUP BY
   results.sims_id
 , results.subject 
ORDER BY
    results.sims_id ASC
  , results.subject ASC
Run Code Online (Sandbox Code Playgroud)

结果

sims_id  subject  C1      C2      C3      
-------  -------  ------  ------  --------
   1111  Art      C       B       (NULL)  
   1111  English  6       5       (NULL)  
   1111  History  B       C       (NULL)  
   1111  maths    8       8       (NULL)  
   1111  science  A       B       (NULL)  
   2222  Art      (NULL)  A       (NULL)  
   2222  English  6               (NULL)  
   2222  ICT      A       B       (NULL)  
   2222  maths    7       6       (NULL)  
   2222  science  A       A*      (NULL)  
Run Code Online (Sandbox Code Playgroud)

见演示http://sqlfiddle.com/#!9/0be1f2/1


joa*_*olo 7

这是pivot使用标准 SQL(以及 MySQL 实现的标准的一部分)的一种方式。这意味着它不仅适用于 MySQL,而且适用于大多数 SQL 数据库:

SELECT
    r0.sims_id, 
    r0.subject, 
    r1.result AS "C1",
    r2.result AS "C2",
    r3.result AS "C3"
FROM
    (SELECT DISTINCT 
        sims_id, subject
     FROM 
         results
     ) r0
    LEFT JOIN results r1 
        ON r1.sims_id = r0.sims_id AND r1.subject = r0.subject AND r1.progress_check = 'C1'
    LEFT JOIN results r2 
        ON r2.sims_id = r0.sims_id AND r2.subject = r0.subject AND r2.progress_check = 'C2'
    LEFT JOIN results r3 
        ON r3.sims_id = r0.sims_id AND r3.subject = r0.subject AND r3.progress_check = 'C3'
ORDER BY
    r0.sims_id, r0.subject ;
Run Code Online (Sandbox Code Playgroud)

检查它在SQLFiddle

虽然这种类型的问题(sims_id, subject-id, progress_check)应该是一个PRIMARY KEY(或,至少,UNIQUE),采用这种方法,有重复值“C1”,“C2”或“C3”为一个单一sims_id,受试者...的笛卡尔积的所有可用信息出现在结果中。没有信息丢失,但也没有汇总。这种行为是否可取取决于用例。