[英]Row into Column in mysql without pivot and group concat
我有一張桌子
ID Student Exam
----------------------
1 Kavi BE
2 MGR BA
3 MGR1 BE
我正在以excel格式寫入此數據。問題是我需要將檢查字段設置為按列顯示,
BE BA
-------------
Kavi NULL
NULL MGR
MGR1 NULL
這只能用查詢完成,因為我無法修改excel類使其打印按列數據。
我已經使用了group concat,但是我需要將考試詳細信息放在單獨的列中而不是在同一列中。我不應該使用數據透視表,因為少數版本的mysql不支持它。 請幫助。
注意:此表可能具有最多記錄,因此請提供可以動態工作的解決方案。
MySQL沒有PIVOT函數,因此您需要使用帶有CASE表達式的聚合函數來獲取結果:
select
max(case when exam = 'BE' then student end) BE,
max(case when exam = 'BA' then student end) BA
from yourtable
group by id;
請參閱帶有演示的SQL Fiddle 。
如果您要獲得未知數量的exam
值,則需要使用動態SQL准備的語句。 該代碼將類似於:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when exam = ''',
exam,
''' then student end) AS `',
exam, '`'
)
) INTO @sql
from yourtable;
SET @sql
= CONCAT('SELECT ', @sql, '
from yourtable
group by id;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
請參閱帶有演示的SQL Fiddle 。 這兩個版本都給出結果:
| BE | BA |
| Kavi | (null) |
| (null) | MGR |
| MGR1 | (null) |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.