Как создать столбец на основе другого столбца на уровне политики SQL Server 2012 - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть такая таблица:

declare @ClaimType table (PolicyNumber varchar(50), QuoteID int,  CoverageType varchar(50))

insert into @ClaimType values   ('00001',1, 'CSO'),
                                ('00001',2, 'CPL'),
                                ('00001',3, 'EO'),
                                ('00002',1, 'CPL'),
                                ('00002',2, 'CGL')

select QuoteID,
        PolicyNumber,      
        CoverageType
from @ClaimType
go

enter image description here

Мне нужно создать столбец 'AnnualStatementLine' и сгенерировать в нем значение на основе CoverageType

На уровне политики мне нужно проверить, имеет ли CoverageType значение CGL или нет.Если нет, напишите '17 .1 ', в противном случае '19 .1'

Так что CoverageType 'CGL' для PolicyNumber 00001 не существует, поэтому AnnualStatementLine должно быть 17,1

Для политики 00002 одно из значений имеет 'CGL ', поэтому должно быть '19 .1'

Возможно ли добиться этого в одном операторе выбора?

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

enter image description here

Спасибо

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

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

declare @ClaimType table (PolicyNumber varchar(50), QuoteID int,  CoverageType varchar(50))

insert into @ClaimType values   ('00001',1, 'CSO'),
                                ('00001',2, 'CPL'),
                                ('00001',3, 'EO'),
                                ('00002',1, 'CPL'),
                                ('00002',2, 'CGL')

select QuoteID,
        PolicyNumber,      
        CoverageType,
        case when PolicyNumber IN (Select PolicyNumber from @ClaimType where CoverageType = 'CGL') then 19.1
        else 17.1 end as AnnualStatementLine
from @ClaimType

Демонстрационная ссылка

0 голосов
/ 13 февраля 2019

Вы можете использовать EXISTS:

SELECT ct.*,
       (CASE WHEN EXISTS (SELECT 1 
                          FROM @ClaimType ct1 
                          WHERE ct1.PolicyNumber = ct.PolicyNumber AND ct1.CoverageType = 'CGL'
                         ) 
             THEN '19.1' 
             ELSE '17.1'
        END) AS AnnualStatementLine
FROM @ClaimType ct;
...