Как я могу легко идентифицировать записи с двойным счетом на сервере SQL? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть таблица с данными, которая выглядит следующим образом:

CustomerID                                                  | Exception Category

1000                                                         A1
1000                                                         A1
1001                                                         A2
1002                                                         A1
1000                                                         A3
1002                                                         A2
1003                                                         A1

В итоге, идентификатор клиента может теоретически иметь одну или несколько меток исключений - для c. 750 000 записей, есть только пять меток исключений - от А1 до А5.

Я пытаюсь суммировать уникальные идентификаторы, попадающие в каждую группу в сводной таблице, но у меня проблема с двойным счетом, так как один и тот же идентификатор может удовлетворять требованиям исключения более чем для одного исключения, т. е. 1000 является исключением на основе критериев A1, а также критериев A3, как показано выше.

По сути, я хотел бы, чтобы мой вывод выглядел так:

CustomerID                                    Exception Class Count    | Exception Category

1000                                                      2               A1
1000                                                      2               A3
1001                                                      1               A2
1002                                                      3               A1
1002                                                      3               A2
1002                                                      3               A3

В качестве объяснения - идентификатор клиента 1000 подразделяется на две категории исключений - A1 и A3, которые представлены в count (2) и исключения следуют как отдельные записи в третьем столбце. Как видно из исходной таблицы, 1000 был помечен как А1 дважды, потому что клиент выбрал эту категорию исключений в две разные даты - я в порядке удаления дублирующейся строки, и мне все равно, какая из них будет удалена как Пока я не теряю тот факт, что 1000 выполнила категорию исключений A1 (в определенный момент времени).

Еще раз спасибо!

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

С функцией окна COUNT ():

select 
  CustomerID,
  count(*) over (partition by CustomerID) [Exception Class Count],
  [Exception Category]
from (
  select distinct CustomerID, [Exception Category]
  from tablename  
) t  

См. Демоверсию . Результаты (для данных вашего образца):

> CustomerID | Exception Class Count | Exception Category
> ---------: | --------------------: | :-----------------
>       1000 |                     2 | A1                
>       1000 |                     2 | A3                
>       1001 |                     1 | A2                
>       1002 |                     2 | A1                
>       1002 |                     2 | A2                
>       1003 |                     1 | A1   
0 голосов
/ 04 мая 2020

Попробуйте это -

Пример таблицы и данных

declare @data table
(
 CustomerID int,
 ExceptionCategory varchar(5)
 )


Insert into @data
(CustomerID, ExceptionCategory) 
values
(1000,'A1'),
(1000,'A1'),
(1001,'A2'),
(1002,'A1'),
(1000,'A3'),
(1002,'A2'),
(1002,'A3'),
(1003,'A1')

Запрос

;With cte (CustomerId, ExceptionClassCount)
as
(
select CustomerId, Count(distinct ExceptionCategory) ExceptionClassCount
From  @data
Group by CustomerId
) 
select distinct  cte.CustomerId, cte.ExceptionClassCount, d.ExceptionCategory
from cte join @data d on cte.CustomerId = d.CustomerId

Результат

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...