代码之家  ›  专栏  ›  技术社区  ›  Serdia

如何计算每件忽略日期索赔的损失金额

  •  0
  • Serdia  · 技术社区  · 7 年前

    我有一张桌子 Loss 每个交易日的金额。

    如何创建列 ClaimLoss 那就等于每次索赔的损失金额了吗?

    declare @TempTable1 table (ID int, ClaimNumber varchar(100), date date, Loss money)
    
    insert into @TempTable1 
    values (1, 'Claim1','2017-01-01', 100),
           (2, 'Claim1','2017-03-06',150),
           (3, 'Claim1','2017-05-01', 50),
           (4, 'Claim2','2018-01-01', 150),
           (5, 'Claim2','2018-08-15', 250),
           (6, 'Claim2','2018-05-03', 350),
           (7, 'Claim3','2018-09-01', 330),
           (8, 'Claim4','2019-01-01', 140),
           (9, 'Claim4','2019-01-13', 225),
           (10, 'Claim5','2019-02-01', 145)
    
    select  ID, 
            ClaimNumber, 
            Date,   
            Loss
    from @TempTable1
    

    enter image description here

    我需要这样的东西:

    enter image description here

    也可以这样做吗 select 声明?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Gordon Linoff    7 年前

    这好像是个地方 row_number() case :

    select t.*,
           (case when row_number() over (partition by ClaimNumber order by date) = 1
                 then sum(loss) over (partition by ClaimNumber) 
                 else 0
            end) as claimloss
    from @TempTable1 t;
    
        2
  •  1
  •   Yogesh Sharma    7 年前

    你可以使用 window 功能:

    select  ID, ClaimNumber, Date, Loss,
            (case when min(id) over (partition by ClaimNumber) = id 
                  then sum(loss) over (partition by ClaimNumber) 
                  else 0
             end) as claimloss
    from @TempTable1;