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

В чем преимущество использования FAST_FORWARD для определения курсора?

SQL Server: попытка добавить ненулевой столбец в существующую таблицу (таблица пуста)

запрос для удаления первого значения из «For XML PATH»

Как автоматически наращивать составной ключ Id только тогда, когда выполняется конкретное условие?

Обработка больших объемов данных в SQL

Reader не читает значения DB

Java не запускает подготовленный оператор с параметром и не бросает никаких ошибок

SQL-сервер sp_columns не возвращает ожидаемый результат

Сравнение даты со строкой Entity Framework

Преобразование даты с использованием SQL-SQL Server

Импорт данных из базы данных Microsoft Works в SqlServer

SQL Server, слияние двух записей в одной записи

Расчет TSQL-группы

Невозможно вставить явное значение для столбца идентификации в таблице «table», если для параметра IDENTITY_INSERT установлено значение OFF

Неправильный синтаксис около '-'

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