【问题标题】:Transpose mysql query rows into columns将 mysql 查询行转置为列
【发布时间】:2012-03-29 22:42:53
【问题描述】:

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

SELECT month,transporttype,count(transporttype) as loads 
from deliveries 
group by month,transporttype

我想将行转换成列。

我知道 mysql 没有数据透视函数,所以需要联合,但不是 100% 确定。

提前感谢您的帮助。

【问题讨论】:

标签: mysql rows transpose


【解决方案1】:

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

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`

另一方面,您应该将 transporttype 值移动到查找表中,并在该表中包含 transporttype_id。

【讨论】:

  • @RyanSmith(注),这个答案应该为你做,但是,如果你跨越年活动,你可能需要考虑将 YEAR 添加为一个额外的组。您不希望将虚假数字滚动到一年与另一年。
  • @DRapp 感谢您的提醒。我将修改我的查询以包含年份。
猜你喜欢
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多