Как получить значение для строки на основе нескольких значений SQL Server 2012 - PullRequest
1 голос
/ 30 апреля 2019

Мне нужно сделать одну строку для каждого PolicyNumber.Но ClaimStatus - это проблема.

Если у меня более 1 претензионного счета, тогда мне нужно проверить, является ли один из ClaimStatus = 'Open'.

Если один из них 'Open', то значение в ClaimStatusдолжно быть Open для всего PolicyNumber, в противном случае ClaimStatus = 'Closed'

Текущий результат выглядит следующим образом:

PolicyNumber    ClaimCount  ClaimStatus
---------------------------------------
Pol1                2        Closed
Pol1                2        Open
Pol2                2        Closed
Pol2                2        Closed
Pol3                1        Closed
Pol4                3        Open
Pol4                3        Closed

Пример кода:

declare @ClaimsTable table (PolicyNumber varchar(50), ClaimCount int, ClaimStatus varchar(50))
insert into @ClaimsTable 
values ('Pol1', 2, 'Closed'), ('Pol1', 2, 'Open'),
       ('Pol2', 2, 'Closed'), ('Pol2', 2, 'Closed'),
       ('Pol3', 1, 'Closed'),
       ('Pol4', 3, 'Open'), ('Pol4', 3, 'Closed')

select * from @ClaimsTable

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

enter image description here

Ответы [ 2 ]

2 голосов
/ 30 апреля 2019

Если у вас есть только два значения, вы можете использовать max():

SELECT policynumber, count(*) AS numclaims,
       MAX(claimstatus)
FROM @ClaimsTable
GROUP BY policynumber;

Это зависит от того, что 'Open'> 'Closed'. Более общее решение может быть:

SELECT policynumber, count(*) AS numclaims,
       (CASE WHEN SUM(CASE WHEN claimstatus = 'Open' THEN 1 ELSE END) > 0
             THEN 'Open'
             ELSE MIN(claimstatus)
        END) AS claimstatus
FROM @ClaimsTable
GROUP BY policynumber;
1 голос
/ 30 апреля 2019

Попробуйте:

   select t.* from (
select *,ROW_NUMBER() over (partition by PolicyNumber order by claimstatus desc) rn 
from @ClaimsTable
) t where rn=1
...