将mysql查询行转换为列

Smu*_*ger 5 mysql transpose rows

我有一个简单的查询,产生以下结果:

SELECT month,transporttype,count(transporttype) as loads 
from deliveries 
group by month,transporttype
Run Code Online (Sandbox Code Playgroud)

我想将行转换为列.

我知道mysql没有pivot函数所以需要union而不是100%肯定.

在此先感谢您的帮助.

nni*_*ols 8

你可以用这样的交叉表来做 -

SELECT
    `year`,
    `month`,
    SUM(IF(`transporttype` = 'inbound',                 1, 0)) AS `inbound`,
    SUM(IF(`transporttype` = 'LocalPMB',                1, 0)) AS `LocalPMB`,
    SUM(IF(`transporttype` = 'Long Distance',           1, 0)) AS `Long Distance`,
    SUM(IF(`transporttype` = 'shuttle',                 1, 0)) AS `shuttle`,
    SUM(IF(`transporttype` = 'export',                  1, 0)) AS `export`,
    SUM(IF(`transporttype` = 'Extrusions-LongDistance', 1, 0)) AS `Extrusions-LongDistance`,
    SUM(IF(`transporttype` = 'Extrusions-Shuttle',      1, 0)) AS `Extrusions-Shuttle`
FROM `deliveries`
GROUP BY `year`, `month`
Run Code Online (Sandbox Code Playgroud)

另外,您应该将transporttype值移动到查找表,并在此表中包含transporttype_id.

  • @RyanSmith(注),这个答案应该适合您,但是,您可能需要考虑将 YEAR 添加为附加组,以防您跨越年度活动。你不希望一年与另一年的数据出现虚假数据。 (2认同)