[英]Is it possible to use Crosstab/Pivot Query in MySQL?
I'm using MySQL. 我正在使用MySQL。 This is table i have 这是我的桌子
supplier_ID Item_ID Date Price QTY
1 1 2012-01-01 00:00:00 500.00 2
1 1 2012-01-03 00:00:00 450.00 10
2 1 2012-01-01 00:00:00 400.00 5
3 1 2012-05-01 00:00:00 500.00 1
I need a select query showing a table something like this. 我需要一个选择查询来显示类似这样的表。
supplier_ID 2012-01-01 2012-01-03 2012-05-01
1 500.00(2) 450.00(10) null
2 400.00(5) null null
3 null null 500.00(1)
You can use this query - 您可以使用此查询-
SELECT
supplier_id,
MAX(IF(date = '2012-01-01', value, NULL)) AS '2012-01-01',
MAX(IF(date = '2012-01-03', value, NULL)) AS '2012-01-03',
MAX(IF(date = '2012-05-01', value, NULL)) AS '2012-05-01'
FROM (
SELECT supplier_id, DATE(date) date, CONCAT(SUM(price), '(', qty, ')') value FROM supplier
GROUP BY supplier_id, DATE(date)
) t
GROUP BY supplier_id;
+-------------+------------+------------+------------+
| supplier_id | 2012-01-01 | 2012-01-03 | 2012-05-01 |
+-------------+------------+------------+------------+
| 1 | 500.00(2) | 450.00(10) | NULL |
| 2 | 400.00(5) | NULL | NULL |
| 3 | NULL | NULL | 500.00(1) |
+-------------+------------+------------+------------+
It produces result you want. 它产生您想要的结果。 But if you want to do it dynamically, then have a look at this article 'Automate pivot table queries' - http://www.artfulsoftware.com/infotree/queries.php#523 , or this link - Dynamic pivot tables . 但是,如果您想动态地进行操作,请参阅这篇文章“自动执行数据透视表查询”-http: //www.artfulsoftware.com/infotree/queries.php#523或此链接- 动态数据透视表 。
SELECT supplier_ID,
CONCAT(SUM(IF(`date`='2012-01-01',ROUND(Price,2),NULL)), '(', SUM(IF(`date`='2012-01-01',QTY,NULL)), ')') AS '2012-01-01',
CONCAT(SUM(IF(`date`='2012-01-03',ROUND(Price,2),NULL)), '(', SUM(IF(`date`='2012-01-03',QTY,NULL)), ')') AS '2012-01-03',
CONCAT(SUM(IF(`date`='2012-05-01',ROUND(Price,2),NULL)), '(', SUM(IF(`date`='2012-05-01',QTY,NULL)), ')') AS '2012-05-01'
FROM supplier
GROUP BY supplier_ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.