一直在寻找将行 (progress_check) 转换为列检查 1、检查 2 等......不需要总和或总数,只是希望显示结果......任何人都可以帮忙,谢谢广告
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
这是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,受试者...的笛卡尔积的所有可用信息出现在结果中。没有信息丢失,但也没有汇总。这种行为是否可取取决于用例。
归档时间: |
|
查看次数: |
54635 次 |
最近记录: |