簡體   English   中英

具有動態列名的數據透視表MySQL

[英]Pivot table with dynamic column names MySQL

大家好,閱讀本文

經過一段時間的搜索,我意識到我需要的是數據透視表。 但是,它必須是動態的。 在where子句中,我將配置stitution_id,每個機構都是托兒所/小學/中學,因此這意味着列名稱將隨着年齡的變化而變化。 (我必須將年齡和性別合並在一起)

這是我使用的SQL查詢。

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF("2018-08-31", date_of_birth)), "%Y")+0 AS `Age`, class.name AS `Name`,
CASE 
    WHEN gender_id = '1'
           THEN 'M'
           ELSE 'F' 
    END as Gender

from security_users AS `su`
INNER JOIN institution_class_students AS `cs`
ON su.id = cs.student_id

INNER JOIN institution_classes AS `class`
ON cs.institution_class_id = class.id

WHERE cs.institution_id = 538

ORDER BY Name

下面是運行上述查詢后一個類的一些示例輸出。

Age Name      Gender
3   Form 1-1    M
4   Form 1-1    F
4   Form 1-1    F
3   Form 1-1    F
3   Form 1-1    F
4   Form 1-1    M
4   Form 1-1    M
4   Form 1-1    F
5   Form 1-1    F
4   Form 1-1    F
3   Form 1-1    F
3   Form 1-1    F
3   Form 1-1    M
3   Form 1-1    M
4   Form 1-1    F
4   Form 1-1    F
5   Form 1-1    F
5   Form 1-1    F
4   Form 1-1    M
4   Form 1-1    M

根據上面的輸出,結果就是我的樣子。 如果我要為一個有年長學生的學校而奔波,那將是11-M,11-F,12-M,12-F。

Class     3-M  3-F  4-M 4-F 5-M 5-F                                     
Form 1-1   3    4    4   6   0   3

以下是我要去某機構工作時的樣子

Class    3-M  3-F  4-M  4-F 5-M 5-F                                     
Form 1-2  5    6    3    2   0   1   
Form 1-3  4    2    7    5   0   0    
Form 2    0    0    4    1   7   1   
Form 3    0    0    0    0   8   9   

這可能嗎? 我已經閱讀了許多數據透視表教程,但是很難理解如何做。 任何人都可以對此有所了解。 感謝每一個幫助! 希望以上細節易於理解。

參見http://mysql.rjweb.org/doc.php/pivot -它包含(並說明)一個存儲過程,該存儲過程查看表以構建必要的數據透視查詢。 然后執行它。 存儲過程的CALL提供6個參數,這比大多數人需要的靈活性更大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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