#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