#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;