В SQL, как я могу показать продажи городов с 0, когда у них нет продаж за год. У меня есть таблица городов и таблица транзакций

#sql #sql-server

Вопрос:

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

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

Городской стол

CityKey Город
1 Нью-Йорк
2 Даллас
3 Сан-Франциско

Таблица транзакций

Город Общий объем продаж Год
Нью-Йорк 100 2019
Даллас 50 2019
Сан-Франциско 100 2019
Нью-Йорк 222 2020

Результат — транзакции по городу:

Город Общий объем продаж Год
Нью-Йорк 100 2019
Даллас 50 2019
Сан-Франциско 100 2019
Нью-Йорк 222 2020
Даллас 0 2020
Сан-Франциско 0 2020

Ответ №1:

Используйте a cross join для создания всех строк, а затем left join для ввода существующих данных:

 select c.city, y.year, coalesce(t.total_sales, 0)
from cities c cross join
     (select distinct year from transactions) y left join
     transactions t
     on t.city = c.city and t.year = y.year;
 

Комментарии:

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

2. @user15488631 . . . Тогда просто используйте таблицу лет вместо y . Вы не упоминаете об этом в своем вопросе.