У меня есть простой запрос с объединением, который корректно возвращает информацию о продуктах:
select
t1.category,
t1.color,
t1.size,
t2.aisle
from infoTable t1
inner join locationTable t2 on t1.aisleNumber = t2.aisleNumber;
Это возвращает
category | color | size | aisle
--------------------------------------
A Red S F12
B Blue M G18
C Green L H9
D Yellow XL D19
Пока все хорошо.
Теперь я хочу присоединиться к таблице, которая сообщает мне, в каких магазинах есть каждый товар и сколько там каждого товара. Я вручную проверяю эти продукты в каждом магазине в другой таблице, чтобы убедиться, что мои данные точны.
select
t1.category,
t1.color,
t1.size,
t2.aisle,
count(case when t3.storeNumber = 11 then 1 else 0 end) as storeNumber11
count(case when t3.storeNumber = 31 then 1 else 0 end) as storeNumber31
count(case when t3.storeNumber = 41 then 1 else 0 end) as storeNumber41
from infoTable t1
inner join locationTable t2 on t1.aisleNumber = t2.aisleNumber
inner join storeTable t3 on t1.category = t3.category and t1.color = t3.color and t1.size = t3.size
group by t1.category,t1.color,t1.size,t2.aisle,t3.storeNumber
Я близок, но результаты неверны. Я получаю это:
category | color | size | aisle | storeNumber11 | storeNumber31 | storeNumber41
--------------------------------------------------------------------------------------------
A Red S F12 17 17 17
B Blue M G18 12 12 12
C Green L H9 14 14 14
D Yellow XL D19 16 16 16
Я знаю факт после ручной проверки, что первая строка должна иметь 17 для storeNumber11, но ноль для 31 и 41. Вторая строка должна иметь ноль для storeNumber11 и 12 для storeNumber31.
Так что тот факт, что я не получаю нулей и повторяю только одно и то же значение, показывает мне, что что-то явно не так. В противном случае я получаю правильное количество строк и информацию, но как я могу исправить это, чтобы правильно подсчитать только те номера магазинов, если выполняется соединение с t3?