Выберите тип пользователя D OR S OR DS из таблицы в базе данных
У меня есть таблица SQL, где Тип пользователя хранится как D
, S
или оба D & S
Как показано ниже,
ID TYPE 1 D 2 S 3 D 3 S
Ожидаемый результат:
- Проверка пользователя принадлежит к типу D OR S OR Both.
- Я ожидаю 1 для D, 2 для S и 3 для D & S
Я написал ниже запрос, который работает отлично, но я все еще чувствую, что запрос и логика могут быть реализованы намного лучше.
select case count(distinct TYPE) when 2 then 'DS' when 1 then (select top 1 TYPE from Table1 ) end as TYPE from Table1
Логика вышеуказанного запроса:
- Получить счетчик ТИП пользователя
- Если
count = 2
верните 'DS' - else, если
count = 1
тогда возвращайте тип пользователя (либо D, либо S)
если вам нужен тип и количество случаев, которые вы могли бы сделать с группой
SELECT type ,COUNT(*) FROM table1 WHERE type IN ( 'D' ,'S' ) GROUP BY type
ИЛИ, если вам нужно количество различных типов и тип
SELECT user ,COUNT(DISTINCT type) ,CASE WHEN COUNT(DISTINCT type) = 2 THEN 'DS' ELSE MAX(type) END , FROM table1 WHERE type IN ( 'D' ,'S' ) GROUP BY user
Вы можете использовать FOR XML PATH следующим образом. Я представляю таблицу Table1 как общую таблицу в этом скрипте:
;With Table1 (ID ,TYPE) as ( Select 1 , 'D' union Select 2 , 'S' union Select 3 , 'D' union Select 3 , 'S' ) SELECT ID, ( SELECT cast(Type as varchar(max)) FROM Table1 as InnerTable1 where InnerTable1.ID = Table1.id FOR XML PATH('') ) from Table1 group by ID