Подсчитайте количество появлений char с учетом идентификатора - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно выполнить запрос, где я могу подсчитать количество различных кодов для каждого идентификатора.

   |Id  | Code
   ------------
   | 1  |   C   
   | 1  |   I   
   | 2  |   I   
   | 2  |   C   
   | 2  |   D   
   | 2  |   D   
   | 3  |   C
   | 3  |   I   
   | 3  |   D 
   | 4  |   I   
   | 4  |   C
   | 4  |   C   

Результат должен быть примерно таким:

   |Id  | Count | #Code C | #Code I | #Code D
   -------------------------------------------
   | 1  | 2     |    1    |    1    |   0  
   | 2  | 3     |    1    |    0    |   2  
   | 3  | 3     |    1    |    1    |   1  
   | 4  | 2     |    2    |    1    |   0  

Можете ли вы дать мне какие-нибудь советы по этому поводу?

Ответы [ 2 ]

3 голосов
/ 28 мая 2020

Это ответ на исходную версию вопроса.

Вы ищете count(distinct):

select id, count(distinct code)
from t
group by id;
2 голосов
/ 29 мая 2020

Если коды относятся только к предоставленным, следующий запрос может предоставить желаемый результат.

    select 
      pvt.Id,
      codes.total As [Count],
      COALESCE(C, 0) AS [#Code C],
      COALESCE(I, 0) AS [#Code I],
      COALESCE(D, 0) AS [#Code D]
      from 
      ( select Id, Code,  Count(code) cnt
        from t
        Group by Id, Code) s
      PIVOT(MAX(cnt) FOR Code IN ([C], [I], [D])) pvt
      join (select Id, count(distinct Code) total from t group by Id) codes on pvt.Id = codes.Id ;

Примечание: как я могу видеть из примеров входных данных, код 'I' встречается во всех ид. Его счетчик равен нулю для Id = 3 в ожидаемом выходе (в вопросе).

Вот правильный результат:

enter image description here

DB Fiddle

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