У меня есть таблица фактов транзакций и продукт, время и местоположение в виде таблиц измерений. Эта таблица фактов разрежена, поэтому, если в январе не было продано ни одной пиццы, запись для таблицы фактов о пицце отсутствует.
Когда я детализирую по продукту агрегированные результаты для пиццы, которой нет в результате. Но я хочу с 0 значениями, так как unit_sold = 0.
Решение состоит в том, чтобы соединить таблицу продуктов с таблицей фактов с помощью левого внешнего соединения. Тогда я смогу получить желаемый результат.
Но когда я режу с другим измерением, таким как местоположение или время, эти продукты снова отсутствуют в результате.
Внешнее соединение предоставляет пустой столбец для других размерных внешних ключей, поэтому предложение WHERE снова удалит их.
Как я могу решить проблему? (использую РОЛАП)
Использование условия соединения - хорошая идея, как ответили некоторые люди. Но мне нужно более общее решение.
Например,
Таблица 1
person birth year death year
a 1950 2006
b 1952 2008
c 1960 2007
d 1953 1990
Я хочу получить год за годом количество людей, родившихся в период с 1950 по 1953 год и умерших в 2006-2008 годах.
Нравиться
birth = 1950 death = 2006 count = 1
birth = 1951 death = 2006 count = 0
...
Можем ли мы справиться с этим сценарием, используя условия соединения и соответствующие условия.
WHERE
в условиеJOIN
. - person Nick   schedule 30.11.2019