Сравните каждый месяц и добавьте строки для дельт

#sql #sql-server #tsql #compare

Вопрос:

Мне нужна ваша помощь, я не могу найти правильное решение.

У меня есть этот стол:

Дата Единица измерения Валюта
01.02.2021 TSS Долл. США
01.03.2021 TSS Долл. США
01.04.2021 TSS Долл. США
01.02.2021 МММ Долл. США
01.02.2021 FDS Долл. США
01.04.2021 FDS Долл. США
01.02.2021 POF Долл. США

Мне нужно заполнить строки для каждой недостающей ЕДИНИЦЫ ИЗМЕРЕНИЯ за каждый месяц, например, ЕДИНИЦА измерения «TSS», по сравнению с первым месяцем 01.02.2021 .

Ожидаемый результат:

Дата Единица измерения Валюта
01.02.2021 TSS Долл. США
01.03.2021 TSS Долл. США
01.04.2021 TSS Долл. США
01.02.2021 МММ Долл. США
01.03.2021 МММ Долл. США
01.04.2021 МММ Долл. США
01.02.2021 FDS Долл. США
01.03.2021 FDS Долл. США
01.04.2021 FDS Долл. США
01.02.2021 POF Долл. США
01.03.2021 POF Долл. США
01.04.2021 POF Долл. США

Все сравнения должны быть с первым месяцем 01.02.2021

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

1. Одним из методов является перекрестное соединение. Получите все различные значения единицы измерения и соедините их со всеми различными значениями даты и добавьте «USD» в качестве константы. Но я предполагаю, что ваша ситуация потребует большей сложности.

2. Можете ли вы добавить свою схему таблицы и сценарии данных, которые помогут вам получить ответ ?

Ответ №1:

Ваши результаты содержат все комбинации первого столбца date со всеми комбинациями двух других unit / currency . Воспользуйся cross join :

 select d.date, uc.unit, uc.currency
from (select distinct date from t) d cross join
     (select distinct unit, currency from t) uc
order by uc.unit, uc.currency, d.date;