2017-02-15 19 views
0

У меня есть таблица, которая выглядит вроде как это:Выясните ли значение присутствует сгруппированных по значению в SQL

CustomerID ItemType 
001   'a' 
001   'b' 
001   'c' 
001   'd' 
002   'd' 

Как структурировать оператор выбора, который выглядит примерно так:

CASE WHEN ItemType = 'a' THEN 1 ELSE 0 END as Aexists, 
CASE WHEN ItemType = 'b' THEN 1 ELSE 0 END as Bexists, 
CASE WHEN ItemType = 'c' THEN 1 ELSE 0 END as Cexists, 
CASE WHEN ItemType = 'd' THEN 1 ELSE 0 END as Dexists, 
CASE WHEN ItemType = 'e' THEN 1 ELSE 0 END as Eexists, 
GROUP BY CustomerID 

если результаты будут выглядеть следующим образом:

CustomerID, Aexists, Bexists, Cexists, Dexists, Eexists 
001   1  1  1  1  0 
002   0  0  0  1  0 

Я запутался о том, как сказать, если так как элементы существуют y распределены по строкам; Мне нужна только одна строка, возвращенная каждому клиенту.

ответ

1

достаточно близко. Использование агрегатной функции MAX

select 
    CustomerID, 
    max(CASE WHEN ItemType = 'a' THEN 1 ELSE 0 END) as Aexists, 
    max(CASE WHEN ItemType = 'b' THEN 1 ELSE 0 END) as Bexists, 
    max(CASE WHEN ItemType = 'c' THEN 1 ELSE 0 END) as Cexists, 
    max(CASE WHEN ItemType = 'd' THEN 1 ELSE 0 END) as Dexists, 
    max(CASE WHEN ItemType = 'e' THEN 1 ELSE 0 END) as Eexists 
from t 
GROUP BY CustomerID 
+0

Умный. Я волновался, что мне нужно сделать что-то глупое, как стержень. Спасибо. –