ДОБАВЬТЕ INSEET, чтобы ВЫБРАТЬ ЗАПРОС для пропущенных значений - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть следующая упрощенная таблица.

|---------------------|------------------|------------------|
|        month        |     customer     |      value       |
|---------------------|------------------|------------------|
|          1          |        A         |        20        |
|---------------------|------------------|------------------|
|          1          |        B         |        20        |
|---------------------|------------------|------------------|
|          1          |        C         |        20        |
|---------------------|------------------|------------------|
|          2          |        A         |        20        |
|---------------------|------------------|------------------|
|          2          |        B         |        20        |
|---------------------|------------------|------------------|

Как видите, для клиента нет значения C, для месяца 2.

В этом случае мне нужно программно добавить месяц = ​​'2' customer = 'C' value = '0', внутри моего оператора select

SELECT month, customer, value FROM mytable

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

Любая помощь с благодарностью.

1 Ответ

1 голос
/ 02 апреля 2020

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

select m.month, c.customer, coalesce(t.value, 0) as value
from (select distinct month from t) m cross join
     (select distinct customer from t) c left join
     t
     on t.month = m.month and t.customer = c.customer;

Примечание: если у вас есть другие источники для месяцев или клиентов, то они, вероятно, быстрее чем при использовании count(distinct).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...