Постоянный набор результатов в определенной области

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

Скажем, у меня есть простая таблица с 4 полями: Продукт, Континент, Месяц, Продажи. Я хочу показать общие продажи для каждого продукта, континента, месяца, НО я всегда хочу отображать КАЖДЫЙ континент, независимо от того, были продажи в этом месяце или нет. Итак, для каждой комбинации продукта и месяца я ВСЕГДА хочу перечислить 7 континентов.

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

Пример данных:

Product Continent   Month   Sales
A       Asia        SEP     ###
A       America     SEP     ###
A       Europe      OCT     ###
A       Africa      AUG     ###
A       Oceania     OCT     ###
B       Europe      SEP     ###
B       Africa      SEP     ###
C       America     AUG     ###
C       Oceania     AUG     ###
C       Asia        OCT     ###

Желаемый результат:

Product Continent   Month   Sales
A       Asia        AUG 
A       America     AUG 
A       Europe      AUG 
A       Africa      AUG     ###
A       Oceania     AUG 
A       Asia        SEP     ###
A       America     SEP     ###
A       Europe      SEP 
A       Africa      SEP 
A       Oceania     SEP 
A       Asia        OCT 
A       America     OCT 
A       Europe      OCT     ###
A       Africa      OCT 
A       Oceania     OCT     ###
B       Asia        SEP 
B       America     SEP 
B       Europe      SEP     ###
B       Africa      SEP     ###
B       Oceania     SEP 
C       Asia        AUG 
C       America     AUG     ###
C       Europe      AUG 
C       Africa      AUG 
C       Oceania     AUG     ###
C       Asia        OCT     ###
C       America     OCT 
C       Europe      OCT 
C       Africa      OCT 
C       Oceania     OCT 
1
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать cross join для генерации строк и left join для ввода значений:

select pm.product, pm.month, c.continent, d.sales
from (select distinct continent from data) c cross join
     (select distinct product, month from data) pm left join
     data d
     on d.continent = c.continent and
        d.product = pm.product and
        d.month = pm.month;

Знал, что будет что-то простое. Никогда не слышал о перекрестных соединениях - сейчас я их рассмотрю. Ваше здоровье!!!

Hillsy7 31.10.2018 12:56

@ Hillsy7. . . Есть ли причина, по которой вы не приняли этот ответ?

Gordon Linoff 31.10.2018 13:26

Обновлено: игнорируйте меня @Gordon, я понятия не имею, как мне это удалось, но я отметил что-то не так, и теперь он работает. Спасибо.

Hillsy7 31.10.2018 15:32

Другие вопросы по теме