SQL Запрос на категоризацию результатов отдельного запроса - PullRequest
0 голосов
/ 27 апреля 2020

Я пытаюсь выполнить запрос по результатам отдельного запроса, чтобы обновить столбец Route_Type для каждой записи на основе уникальных Route_Code и Delivery_Day. Для каждого отдельного Route_Code из запроса на выбор, Route_Type должен обновляться на основе следующих логик c:

  1. , если нет записей для указанного c Route_Code, где Delivery_Day = 'Mon' тогда Route_Type должен обновиться до 'A'
  2. , если нет записей для указанного c Route_Code, где Delivery_Day = 'Sat', тогда Route_Type должен обновиться до 'B'
  3. Если нет записей для указанного c Route_Code, где Delivery_Day = 'Mon' ИЛИ ​​'Sat', тогда Route_Type должен быть 'TBD'
  4. Иначе Route_Type = 'Both.'

Данные:

Record   Route_Code   Delivery_Day   Route_Type
1        112          Mon
2        112          Thur
3        112          Sat
4        112          Sun
5        113          Tue
6        113          Fri
7        113          Sat
8        113          Sun
9        113          Wed

Выбор запроса:

Select Distinct Route_Code
From Deliveries;

Результаты:

     Route_Code
1    112
2    113

запрос должен вернуть все уникальные Route_Code и рассчитанный Route_Type для каждого, как показано ниже ...

Желаемый результат запроса:

     Route_Code   Route_Type
1    112          Both
2    113          A

В качестве продолжения я хотите, чтобы все Route_Codes с записями менее 1 месяца отображали 'TBD'. Лог c, который у меня пока есть,

When
Max(sum(case when Delivery_Day= 'Mon' then 1 else 0 end),
    sum(case when Delivery_Day= 'Tue' then 1 else 0 end),
    sum(case when Delivery_Day= 'Wed' then 1 else 0 end),
    sum(case when Delivery_Day= 'Thu' then 1 else 0 end),
    sum(case when Delivery_Day= 'Fri' then 1 else 0 end),
    sum(case when Delivery_Day= 'Sat' then 1 else 0 end),
    sum(case when Delivery_Day= 'Sun' then 1 else 0 end)
Then 'TBD'

Я понимаю, что встроенная функция Max () обрабатывает только одиночные аргументы, и мне интересно, откуда go отсюда.

1 Ответ

0 голосов
/ 27 апреля 2020

Это звучит как агрегация. Я нахожу ваши логи c немного сложными для подражания. Если я правильно понимаю, у "B" доставка в понедельник, а у "A" суббота. Логика c выглядит так:

select route_code,
       (case when sum(case when Delivery_Day = 'Mon' then 1 else 0 end) > 0 and
                  sum(case when Delivery_Day = 'Sat' then 1 else 0 end) > 0 
             then 'Both'
             when sum(case when Delivery_Day = 'Mon' then 1 else 0 end) > 0 
             then 'B'
             when sum(case when Delivery_Day = 'Sat' then 1 else 0 end) > 0 
             then 'A'
             else 'TBD'
        end) as route_type       
from delivies
group by route_code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...