2012-02-15 107 views
0

我正在創建一個SQL語句,該語句將返回每個商店中可以找到的每個產品的列表和產品的數量。SELECT語句中的子查詢(MySQL)

我的表的結構(有一些樣本數據)如下:

 
productID - size - color - stock - storeID 
1   - S - RED01 - 1  - BCN 
1   - S - RED01 - 3  - MAD 
2   - S - YEL02 - 0  - BCN 
2   - S - YEL02 - 2  - MAD 
1   - S - RED01 - 1  - BCN2 

我需要類似這樣的結果:

 
productID - size - stockBCN (BCN + BCN2) - stockMAD 
1   - S - 2      - 3 
2   - S - 0      - 2 

我使用這個語句,適用於獨特的產品

SELECT DISTINCT prodID, size, 
    (SELECT SUM(stock) FROM stocks WHERE storeID IN ('BCN','BCN2') AND prodID = 1 AND size = 'S' AND color = 'RED01' GROUP BY prodID, size, color) AS stockBCN, 
    (SELECT SUM(stock) FROM stocks WHERE storeID = 'MAD' AND prodID = 1 AND size = 'S' AND color = 'RED01' GROUP BY prodID, size, color) AS stockMAD, 
FROM stocks WHERE storeID IN ('BCN','BCN2','MAD') 
AND prodID = (1) AND size = 'S' AND color = 'RED01' 

如何更改它使其適用於所有行電子表格?

回答

7

你可能想利用,而不是與DISTINCT去那裏,即GROUP BY條款:

SELECT productId, Size, 
SUM(CASE WHEN storeID IN ('BCN', 'BCN2') THEN stock ELSE 0 END) AS stockBCN, 
SUM(CASE WHEN storeID = 'MAD' THEN stock ELSE 0 END) AS stockMAD 
FROM stocks 
GROUP BY productId, Size 
+0

該解決方案將執行好得多 – Kaii 2012-02-15 18:27:00

+0

這正是我所需要的。謝謝! – 2012-02-16 07:29:44

1

IMO黃金時間使用case語句

Select productID, Size, Color, 
SUM(CASE WHEN STOREID IN ('BCN','BCN2') THEN stock else 0 end) as StockBCN, 
SUM(Case WHEN STOREID = 'MAD') THEN stock else 0 end) as StockMad 
FROM STOCKS 
Where storeID in ('BCN', 'BCN2','MAD') 
GROUP BY productID, Size, Color