SQLITE: transposition de filas en columnas correctamente

Tengo una database que contiene una tabla para productos de este tipo:

order_id | prod_code | prod_color | size | quantity | ----------------------------------------------------- 1 SHIRT 001 S 10 1 SHIRT 001 M 7 1 SHIRT 001 L 8 1 SHIRT 001 XL 1 1 SHIRT 995 S 2 1 SHIRT 995 M 1 1 SHIRT 995 L 0 1 SHIRT 995 XL 1 2 PANTS .... 

y una tabla de precios de productos como esta:

 prod_code | prod_color | price | currency ----------------------------------------- SHIRT 001 10 EUR SHIRT 001 9 USD SHIRT 001 50 YEN SHIRT 001 15 RUB SHIRT 995 20 EUR SHIRT 995 29 USD SHIRT 995 100 YEN SHIRT 995 45 RUB PANTS .... 

Lo que me gustaría get es una vista como esta (por simplicidad filtrada por order_id):

 order_id | prod_code | prod_color | size | quantity | EUR | USD | YEN | RUB --------------------------------------------------------------------------- 1 SHIRT 001 S 10 10 9 50 15 1 SHIRT 001 M 7 10 9 50 15 1 SHIRT 001 L 8 10 9 50 15 1 SHIRT 001 XL 1 10 9 50 15 1 SHIRT 995 S 2 20 29 100 45 1 SHIRT 995 M 1 20 29 100 45 1 SHIRT 995 L 0 20 29 100 45 1 SHIRT 995 XL 1 20 29 100 45 

Ya busqué en la web y SO, y encontré ESTA PREGUNTA que me muestra exactamente lo que tengo que hacer, pero creo que con algunas modificaciones …

Intenté ejecutar esta consulta en la database:

 SELECT o.order_id, o.prod_code, o.prod_color, o.size, o.quantity, MAX(CASE WHEN p.currency = 'EUR' THEN p.price END) AS 'EUR', MAX(CASE WHEN p.currency = 'USD' THEN p.price END) AS 'USD', MAX(CASE WHEN p.currency = 'YEN' THEN p.price END) AS 'YEN', MAX(CASE WHEN p.currency = 'RUB' THEN p.price END) AS 'RUB' FROM products_order o JOIN products_prices p ON o.prod_code = p.prod_code WHERE o.order_id = 1 GROUP BY o.order_id, o.prod_code, o.prod_color, o.size, o.quantity 

devolverá en las columnas de precios, para cada fila, el valor MÁXIMO encontrado en toda la columna: así que tanto para [color_producto = 001] como para [color_producto = 995] tengo un precio igual a 20 EURO (cuando para 001 es más barato, solo 10 euros!)

Intenté también sin MAX, pero me da una fila por cada precio, dejando muchas celdas vacías (entonces entendí para qué se usa MAX: D).

¿Conoces una manera de hacer lo que estoy tratando de hacer? ¿Cómo puedo usar MAX dentro de un único prod_color en lugar de cada prod_color?

Espero que puedan entender lo que escribí, gracias de antemano, cualquier ayuda es apreciada.

(Si necesita algo explicado más claramente, solo pregunte y lo voy a responder.

Gracias de nuevo, mis mejores deseos

AND o.prod_color = p.prod_color una condición JOIN adicional: AND o.prod_color = p.prod_color

http://sqlfiddle.com/#!5/fadad/5

 SELECT o.order_id, o.prod_code, o.prod_color, o.size, o.quantity, MAX(CASE WHEN p.currency = 'EUR' THEN p.price END) AS 'EUR', MAX(CASE WHEN p.currency = 'USD' THEN p.price END) AS 'USD', MAX(CASE WHEN p.currency = 'YEN' THEN p.price END) AS 'YEN', MAX(CASE WHEN p.currency = 'RUB' THEN p.price END) AS 'RUB' FROM products_order o JOIN products_prices p ON o.prod_code = p.prod_code AND o.prod_color = p.prod_color /* this line is added */ WHERE o.order_id = '1' GROUP BY o.order_id, o.prod_code, o.prod_color, o.size, o.quantity 

Las consultas de ejemplo simplificadas sin GROUP BY muestran la diferencia:

http://sqlfiddle.com/#!5/fadad/13