Как я могу присвоить значение на основе поля даты?

#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
  

Я не знаю названия ваших таблиц, поэтому вам придется их заменить.