2012-01-19 24 views
6

Tôi đang sử dụng MySQL. Đây là bảng tôi cóCó thể sử dụng truy vấn Crosstab/Pivot trong MySQL không?

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 

Tôi cần một truy vấn chọn hiển thị bảng như thế này.

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

hmmm .. câu hỏi hay ... hãy để tôi nghĩ đầu tiên là có thể? –

Trả lời

6

Bạn có thể sử dụng truy vấn này -

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

Nó tạo ra kết quả bạn muốn. Nhưng nếu bạn muốn làm điều đó một cách năng động, thì hãy xem bài viết này 'Tự động hóa các truy vấn bảng tổng hợp' - http://www.artfulsoftware.com/infotree/queries.php#523 hoặc liên kết này - 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 
Các vấn đề liên quan