Как получить выборочный счет в sql - PullRequest
0 голосов
/ 26 марта 2020

У меня есть промежуточный результат, как показано ниже

year    ID                  edition
1996    WOS:000074643400033 WOS.SCI
1996    WOS:000074643400033 WOS.ISSHP
1996    WOS:000074643400033 WOS.ISTP
2004    WOS:000222568300039 WOS.ISTP
2004    WOS:000222568300039 WOS.SCI
2008    WOS:000265048200175 WOS.ISTP
2009    WOS:000275179901182 WOS.ISTP
2009    WOS:000275179901182 WOS.ISSHP

Теперь я должен выполнить подсчет поверх этого результата при следующих условиях, если идентификатор содержит как "WOS.ISTP", так и "WOS.ISSHP". «Выпуск за один и тот же год, его нужно посчитать всего один раз.

моя финальная таблица должна выглядеть следующим образом.

Примечание : я добавил столбец "промежуточный_чет" только для понимания цели, он не должен появляться в итоговой таблице.

year    ID                  edition     intermediate_count  Final_count
1996    WOS:000074643400033 WOS.SCI       1                     2
1996    WOS:000074643400033 WOS.ISSHP     1 
1996    WOS:000074643400033 WOS.ISTP        

2004    WOS:000222568300039 WOS.ISTP      1                     2
2004    WOS:000222568300039 WOS.SCI       1 

2008    WOS:000265048200175 WOS.ISTP      1                     1

2009    WOS:000275179901182 WOS.ISTP      1                     1
2009    WOS:000275179901182 WOS.ISSHP

Я пытался использовать CASE в следующим образом, но не сработало.

select id, year, 
       case 
           when edition_code = 'WOS.ISTP' and edition_code = 'WOS.ISSHP' then 'both' 
           else edition_code
       end as edition_code_new   
from table
group by id, year, edition_code_new
order by id;

любая помощь будет признательна, спасибо заранее.

1 Ответ

1 голос
/ 26 марта 2020

Предполагая, что вы хотите одну строку для id и year, вы можете использовать count(distinct):

select id, year, 
       count(distinct case when edition_code in ('WOS.ISTP', 'WOS.ISSHP')
                           then 'WOS.ISTP'
                           else edition_code
             end) as count
from table
group by id, year
order by id;

Вы также можете сформулировать это как оконную функцию, если вы хотите исходные строки.

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