Выберите тип пользователя D OR S OR DS из таблицы в базе данных

У меня есть таблица SQL, где Тип пользователя хранится как D , S или оба D & S

Как показано ниже,

 ID TYPE 1 D 2 S 3 D 3 S 

Ожидаемый результат:

  1. Проверка пользователя принадлежит к типу D OR S OR Both.
  2. Я ожидаю 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 

Логика вышеуказанного запроса:

  1. Получить счетчик ТИП пользователя
  2. Если count = 2 верните 'DS'
  3. 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 
Давайте будем гением компьютера.