【问题标题】:How to get value per row based on multiple values SQL Server 2012如何根据多个值 SQL Server 2012 获取每行的值
【发布时间】:2019-04-30 00:47:19
【问题描述】:

我需要为每个 PolicyNumber 创建一行。但是 ClaimStatus 是问题所在。

如果我有超过 1 个 claimCount,那么我需要检查一个 ClaimStatus = 'Open'。

如果其中一个是“打开”,那么对于整个 PolicyNumberClaimStatus 中的值需要为 Open,否则为 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

结果应该是这样的:

【问题讨论】:

    标签: sql tsql sql-server-2012


    【解决方案1】:

    如果只有两个值,可以使用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;
    

    【讨论】:

    • 谢谢,但是这个 MAX 将基于什么?如果相同的 PolicyNumber 将有 2 个具有不同 ClaimStatus 的索赔,它会选择哪一个?
    • @Oleg 。 . .它计算了最大值,如果一个是'Open',另一个是'Closed',则为'Open'
    • 是的。谢谢,我的评论与第一段代码有关。最大值(索赔状态)
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-16
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      • 2015-12-30
      • 2021-03-27
      相关资源
      最近更新 更多