Выберите тип пользователя 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 
Interesting Posts

.NET vs SQL Server – лучшая практика для повторного поиска

Есть ли способ для столбца SQL ORDER BY ASCENDING с определенными результатами выше ORDER BY?

Используемая версия SQL Server не поддерживает тип данных datetime2?

Сохраненные процедуры SQL-тестирования

Запрос Haversine в Oracle

Как получить результат запроса ниже sql?

Ошибка процесса с сообщением «Ошибка FileStore из WriteFile»?

Различают два столбца (отдельно) и MIN на другой столбец

ПОЛНАЯ ВНЕШНЯЯ ВСТУПЛЕНИЕ, которая несколько INNER

Как я могу выборочно удалять значения из одного столбца, но не другого?

Включить внешний ключ с проверкой существующих данных

Entity Framework: Insert вызывает нарушение ограничения PRIMARY KEY с использованием Azure SQL, а не локального

Может ли SQL-сервер вместо силы обновления вставить новую строку

Создайте тип со значением по умолчанию и проверите ограничение в SQL Server 2005

Как индексы работают над представлениями?

Давайте будем гением компьютера.