将列作为标题并在sql中将相似的id组合在一行中

时间:2013-06-07 12:33:01

标签: mysql

我有一个查询,其输出类似于下表(参见当前输出),其中month是一列。我想要的是将月份名称作为标题,并将相同的项目代码和它们的数量组合在哪个月下,但仅限于一行。

当前输出:

Itemcode    qty     month          
  001       200     Jan  
  001        50     Feb          
  002       100     Feb  
  002       100     Apr         
  003        50     Mar        
  003       200     Apr 
  004       300     Jan        
  004       100     Mar        

这就是我想要的

  Itemcode   Jan      Feb     Mar   Apr ......        
  001        200       50         
  002                 100            100
  003                          50    200      
  004        300              100              

提前致谢

1 个答案:

答案 0 :(得分:0)

SELECT
ItemCode,
MAX(CASE `month` WHEN 'Jan' THEN qty END) AS Jan,
MAX(CASE `month` WHEN 'Feb' THEN qty END) AS Feb,
MAX(CASE `month` WHEN 'Mar' THEN qty END) AS Mar,
MAX(CASE `month` WHEN 'Apr' THEN qty END) AS Apr
FROM
Table1
GROUP BY ItemCode

看到它在sqlfiddle中正常工作。

MySQL没有像SQL Server这样的便捷PIVOT函数,所以你必须使用上面的代码。

但在我看来,输出格式化应该在应用层上完成,而不是在DB层。