2012-08-03 251 views
4

我已經包含了產品的表的數據庫命令是這樣的:SQLITE - 轉置行轉換成列正確

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  .... 

和產品的價格表如下:

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  .... 

什麼,我想想獲得,是(通過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 

我已經通過網絡看並通過SO,我發現THIS QUESTION,顯示我正是我需要做的,但我認爲有一些修改...

我tryed到數據庫上運行此查詢:

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 

將返回在價格列中,對於每一行,在整列中找到最大值:所以對於[product_color = 001]和[product_color = 995],我的價格等於20歐元(當001價格便宜時,只有10歐元!)

我嘗試過也沒有MAX,但它給了我一行的每個價格,留下很多單元格爲空(然後我明白什麼是用於MAX: d)。

你知道一種方法來做我想做的事嗎?我如何在一個prod_color中使用MAX,而不是通過每個prod_color?

我希望你能理解我寫的,在此先感謝,任何幫助表示感謝。

(如果你需要的東西解釋的更清楚,只問和我儘快回覆會再次

感謝,問候

+2

SQLFiddle:http://sqlfiddle.com/#!5/fadad – biziclop 2012-08-03 17:24:12

回答

7

我增加了一個額外JOIN條件: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 

沒有GROUP BY的簡單示例查詢顯示di fference:

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

+0

是這樣真棒感謝很多人! – 2016-03-19 11:29:35