2012-01-19 39 views
6

我正在使用MySQL。這是表我有是否可以在MySQL中使用交叉表/數據透視表?

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 

我需要一個選擇查詢顯示一個這樣的表。

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) 
+0

嗯..很好的問題......讓我首先想想它有可能嗎? –

回答

6

您可以使用此查詢 -

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) | 
+-------------+------------+------------+------------+ 

它產生導致你想要的。但如果你想動態地做到這一點,那麼看看這篇文章'自動化數據透視表查詢' - http://www.artfulsoftware.com/infotree/queries.php#523,或者這個鏈接 - Dynamic pivot tables

0
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