Подзапрос в операторе SELECT (MySQL) - PullRequest
0 голосов
/ 15 февраля 2012

Я создаю оператор SQL, который будет возвращать список продуктов и количество каждого из них, которое я могу найти в каждом магазине.

Структура моей таблицы (с некоторыми образцами данных)следующим образом:

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'

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

Ответы [ 2 ]

8 голосов
/ 15 февраля 2012

Вы, вероятно, хотите использовать предложение 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
1 голос
/ 15 февраля 2012

ИМО прайм-тайм, чтобы использовать регистр

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...