SQL Server [PATSTAT] запрос |Несколько значений charindex & - PullRequest
0 голосов
/ 26 сентября 2019

Hello Stack Overflow Community.

Я получаю данные с помощью SQL из PATSTAT (база данных патентов из Европейского патентного ведомства).У меня есть две проблемы (см. Ниже).К вашему сведению, команды PATSAT sql весьма ограничены.


I.Charindex с несколькими значениями

Я ищу конкретные две конкретные группы патентов ["Y02E" и "Y02C"] и хочу получить данные по ним.Я обнаружил, что использование функции charindex работает , если я вставляю одну группу;

and charindex ('Y02E', cpc_class_symbol) > 0

Но если я хочу использовать другую функцию charindex, запрос просто время ожидания ;

and charindex ('Y02E', cpc_class_symbol) > 0 or charindex ('Y02C', cpc_class_symbol) >0

Я новичок в абсолютном SQL, но буду очень признателен за вашу помощь!


II.Вывести значения из столбца в одной ячейке с разделением запятыми

По сути, я хочу применить то, что я нашел как «string_agg» -команду, однако она не работает для этой базы данных.У меня есть записи с уникальным идентификатором, которые имеют несколько категорий патентов.Например:

appln_nr_epodoc | cpc_class_symbol

EP20110185794 | Y02E  10/125

EP20110185794 | Y02E  10/127

Мне бы хотелось, чтобы это было так, однако:

appln_nr_epodoc | cpc_class_symbol

EP20110185794 | Y02E  10/125, Y02E  10/127

Опять же, я новичок в sql, поэтому любая помощь приветствуется!Спасибо!

Я также приложу полный код здесь для прозрачности

SELECT  a.appln_nr_epodoc, a.appln_nr_original, psn_name, person_ctry_code, person_name, person_address, appln_auth+appln_nr,  
appln_filing_date, cpc_class_symbol
FROM
tls201_appln a
join tls207_pers_appln b on a.appln_id = b.appln_id
join tls206_person c on b.person_id = c.person_id
join tls801_country on c.person_ctry_code= tls801_country.ctry_code
join tls224_appln_cpc on a.appln_id = tls224_appln_cpc.appln_id
WHERE appln_auth = 'EP'
and appln_filing_year between 2005 and 2012
and eu_member = 'Y'
and granted = 'Y'
and psn_sector = 'company'
and charindex ('Y02E', cpc_class_symbol) > 0

1 Ответ

0 голосов
/ 26 сентября 2019

Для вашей части 2 вот пример данных, которые я создал, а вот код.Это дает ВАШ запрашиваемый вывод.

create table #test_1 (
            appln_nr_epodoc varchar(20) null
            ,cpc_class_symbol varchar(20) null
            )

            insert into #test_1 values
            ('EP20110185794','Y02E  10/125')
            ,('EP20110185794','Y02E  10/127')
            ,('EP20110185795','Y02E  10/130')
            ,('EP20110185796','Y02E  20/140')
            ,('EP20110185796','Y02E  21/142')



            with CTE_1 as (select *
            from (
            select * 
            ,R1_1 =  Rank() over(partition by appln_nr_epodoc order by cpc_class_symbol )
            from #test_1
            ) as a
            where R1_1 = 1
            )

            ,CTE_2 as (select *
            from (
            select * 
            ,R1_1 =  Rank() over(partition by appln_nr_epodoc order by cpc_class_symbol )
            from #test_1
            ) as a
            where R1_1 = 2 ) 

            select a.appln_nr_epodoc
            ,a.cpc_class_symbol+','+c.cpc_class_symbol
            from CTE_1 a
            join CTE_2 c on c.appln_nr_epodoc = a.appln_nr_epodoc

Out put enter image description here

...