2012-02-15 170 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