2012-02-15 2 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' 

Как его изменить, чтобы он работал для всех строк в e стол?

ответ

7

Вы, вероятно, хотите использовать оговорку GROUP BY вместо того, чтобы идти с DISTINCT там, то есть:

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

+0

этот это то, что мне нужно. Благодаря! –

1

IMO простое время использовать сазе

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 
Смежные вопросы