簡體   English   中英

在沒有樞軸和組concat的mysql中排成列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM