Количество подсчета одного и того же значения

#sql #sql-server

#sql #sql-сервер

Вопрос:

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

 | DocumentNumber | CustomerID |
------------------------------
|  AAA           |     1      |
|  BBB           |     1      |
|  CCC           |     2      |
|  DDD           |     3      |
-------------------------------
 

Я хотел бы отобразить немного измененную таблицу следующим образом:

 | DocumentNumber | CustomerID |  Repeate |
-----------------------------------------
|  AAA           |     1      | Multiple |
|  BBB           |     1      | Multiple |
|  CCC           |     2      | Single   |
|  DDD           |     3      | Single   |
------------------------------------------
 

Итак, идея проста — мне нужно добавить новый столбец и установить значение «Несколько» и «Одно»
в зависимости от того, существует ли идентификатор клиента несколько раз

Ответ №1:

Использовать оконные функции:

 select t.*,
       (case when count(*) over (partition by CustomerId) = 1 then 'Single'
             else 'Multiple'
        end) as repeate
from t;
 

Ответ №2:

Вы также достигаете того же, используя GROUP BY amp; SUB QUERY

 DECLARE @T TABLE(
DocumentNumber VARCHAR(10),
CustomerID INT)

Insert Into @T VALUES('AAA', 1 ),('BBB', 1 ),('CCC', 2 ),('DDD', 3 )

select M.DocumentNumber,M.CustomerID,CASE WHEN Repeated_Row>1 THEN 'Multiple' ELSE 'Single' END As Repeate 
from @T M
LEFT JOIN (SELECT CustomerID,COUNT(*) AS Repeated_Row FROM @T GROUP BY CustomerID) S ON S.CustomerID=M.CustomerID