MYSQL命令动态数据透视表结果由id

时间:2014-07-10 08:15:18

标签: mysql sql pivot pivot-table

这是我的查询。这是Fiddle

set @sql:=null;
select group_concat(distinct concat('sum(if(c.center_name="',center_name,'",w.final_kg,0)) `', center_name,'`'))
from wd_collection_center
into @sql;

set @sql:=concat('SELECT w.purchase_date,', @sql, '
                  FROM wd_leaf_purchase w
                  join wd_leaves_supplier s on w.supplier_id = s.supplier_id
                  join wd_collection_center c on s.center_id = c.center_id
                  WHERE EXTRACT(MONTH FROM w.purchase_date) = MONTH(NOW())
                  AND EXTRACT(YEAR FROM w.purchase_date) = YEAR(NOW())
                  group by w.purchase_date;');

prepare st from @sql;
execute st;
deallocate prepare st;

以上查询生成包含wd_collection_center表中列名的报告。目前,列名称按center_name的报告顺序显示。

这意味着,我在wd_collection_center表上有数据如下。

center_id, center_name
20         Pann Center
41         Main Center
42         Vehicle

当我在查询上方运行时,结果中的列如下所示。

purchase_date, Main Center, Pann Center, Vehicle

但我需要按center_id排序列,如下所示。

purchase_date, Pann Center, Main Center, Vehicle

我尝试了order by center_id。但它没有对输出做任何改变。

我该怎么做?

这是Fiddle

0 个答案:

没有答案