2012-01-19 8 views
6

Estoy usando MySQL. Esta es la tabla que tengo¿Es posible utilizar la tabla cruzada/consulta dinámica en 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 

Necesito una consulta de selección que muestre una tabla como esta.

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 .. pregunta agradable ... déjame pensar primero ¿es posible? –

Respuesta

6

Puede utilizar esta consulta -

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

Produce resultado que desea. Pero si quiere hacerlo de forma dinámica, eche un vistazo a este artículo "Automatizar consultas de tabla dinámica" - http://www.artfulsoftware.com/infotree/queries.php#523, o este enlace - 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 
Cuestiones relacionadas