#sql-server
#sql-server
Вопрос:
У меня есть две таблицы. Одно с датами, а другое с датами подарков и типами подарков. В третьей таблице отображаются результаты, которых я хочу достичь. Я хочу отобразить в таблице столбец с датами продукта под названием «Результаты». Результаты должны возвращать:
- ‘Не является донором’, если перед датой продукта нет даты подарка.
- ‘Товары-доноры’, если до указанной даты имеется только один продукт подарочного типа.
- ‘Множественный донор продуктов’, если до даты существует несколько типов подарков продуктов (но не может быть «другого» типа подарка).
- «Другой донор», если существует «Другой» тип подарка, независимо от того, сколько продуктов было доставлено ранее.
Таблица 1
Donor Date
Steve 2/1/2020
Steve 3/1/2020
Steve 4/1/2020
Steve 5/1/2020
Steve 6/1/2020
Steve 7/1/2020
Steve 9/1/2020
Steve 10/1/2020
Bill 2/1/2020
Bill 3/1/2020
Bill 4/1/2020
Bill 5/1/2020
Bill 6/1/2020
Bill 7/1/2020
Bill 8/1/2020
Таблица 2
Donor Gift Date Gift Type
Steve 8/15/2020 Product
Steve 9/15/2020 Product
Bill 5/15/2020 Product
Bill 6/15/2020 Other
Bill 7/15/2020 Product
Ожидаемый результат
Donor Date Results
Steve 2/1/2020 Not A Donor
Steve 3/1/2020 Not A Donor
Steve 4/1/2020 Not A Donor
Steve 5/1/2020 Not A Donor
Steve 6/1/2020 Not A Donor
Steve 7/1/2020 Not A Donor
Steve 9/1/2020 Products Donor
Steve 10/1/2020 Multiple Products Donor
Bill 2/1/2020 Not A Donor
Bill 3/1/2020 Not A Donor
Bill 4/1/2020 Not A Donor
Bill 5/1/2020 Not A Donor
Bill 6/1/2020 Products Donor
Bill 7/1/2020 Other Donor
Bill 8/1/2020 Other Donor
Комментарии:
1. Можете ли вы опубликовать данные вместо изображений
Ответ №1:
Вы можете использовать оператор Case для рассмотрения каждого возможного вывода:
select T.Donor,
T.Date,
Results = Case when not exists (Select top 1 1 From table2 where Donor = T.Donor and [Gift Date] < T.[Date]) then 'Not A Donor'
when exists (Select top 1 1 From table2 where Donor = T.Donor and [Gift Date] < T.[Date] and [Gift Type] = 'Other') then 'Other Donor'
when (Select count(1) From table2 where Donor = T.Donor and [Gift Date] < T.[Date] and [Gift Type] = 'Product') = 1 then 'Products Donor'
when (Select count(1) From table2 where Donor = T.Donor and [Gift Date] < T.[Date] and [Gift Type] = 'Product') > 1 then 'Multiple Products Donor'
end
from table1 T
Я не знаю названия ваших таблиц, поэтому вам придется их заменить.