SQL: ЕСЛИ ОДИН СЛУЧАЙ С ГРУППА BY - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть эта таблица:

DATUM,Customer_ID,Block_TYPE
'2019-01-21','00027096',NULL
'2019-01-21','00027096','big'
'2019-03-06','00573618','small'
'2019-03-06','00573618',NULL
'2020-01-01';'00027513',NULL

Я хочу создать новую таблицу с одной строкой на клиента, где значения столбца Block_Type имеют приоритеты:

  1. если оно имеет значение большое, то короткое,
  2. , если оно маленькое, то маленькое,
  3. , наконец, если оно нулевое, то ноль

I пытался сделать это, но я получаю одинаковое значение для всех клиентов: (

SELECT Datum, Customer_ID, 
    CASE 
        WHEN EXISTS (select Block_TYPE from MyTable where Block_TYPE = 'big') THEN 'big'
        WHEN EXISTS (select Block_TYPE from MyTable where Block_TYPE = 'small') THEN 'small'
        ELSE Null 
    END AS Decision
FROM MyTable

Ответы [ 2 ]

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

Я хочу создать новую таблицу с одной строкой на клиента, где значения столбца Block_Type имеют приоритеты:

Вы можете использовать агрегацию в качестве уровня клиента:

select customer_id,
       (case when sum(case when type = 'big' then 1 else 0 end) > 0
             then 'small'
             else max(type)
        end) as overall_type 
from mytable
group by customer_id
0 голосов
/ 01 апреля 2020

Подзапрос не требуется:

SELECT Datum, Customer_ID, 
       CASE 
         WHEN Block_TYPE = 'big' THEN 'short'
         WHEN Block_TYPE = 'small' THEN 'small'
         ELSE Null 
       END AS Decision
FROM MyTable
...