2016-11-16 9 views
1

私は2つのデータセットを持っています。左データセットは同じQuoteID、PolicyNumberを持ちますが、年、月、および有料損失が異なる場合があります。 2番目のデータセットには異なるQuoteID、異なる年のPolicyNumber、異なる月があり、複数のClassCodeでもかまいません。 私は最初のデータセットと2番目のデータセットを結合し、同じPaidLossを保持する必要があります。主な目標は、月ごとに同じ総支払額を維持することです。私はおそらくそれほどビジネスには適していないと知っていますが、それは上司が見たいものです。多くの人に参加して同じ総額を保つ方法

select  
      cte1.PolicyNumber, 
      AccidentYear, 
      AccidentMonth, 
      cte2.ClassCode, 
    /* 
     Using ROW_NUMBER() to check if it's the first record in the join and returns 
     the PaidLosses value if so, otherwise it will display 0. The ORDER BY (SELECT 0) 
     is there just because I don't need the row number to be based on any explicit 
     order. 
    */ 
      CASE 
       WHEN ROW_NUMBER() OVER (PARTITION BY cte1.QuoteID, cte1.PolicyNumber ORDER BY (SELECT 0))=1 THEN cte1.PaidLosses 
       ELSE 0 
      END as PaidLosses 
from  cte1 inner join cte2 on cte1.PolicyNumber=cte2.PolicyNumber AND cte1.QuoteID=cte2.QuoteID AND cte1.AccidentYear=cte2.LossYear 
      AND cte1.AccidentMonth=cte2.LossMonth 

しかし、いくつかの理由では、ポリシーのいくつかをピックアップしdoesntの:

enter image description here

これは私がこれまで試したものです。 は、理想的には私はそのようなものを見たい: が最初の行、 上の損失を支払ったが、ClassCodeが同じポリシーのために繰り返される場合は、その後、QuoteID、年と月が、その後0

enter image description here

答えて

1

Iを持っていますあなたはまたcte1.AccidentYear,cte1.AccidentMonthでパーティション化する必要があると思います。

CASE 
WHEN ROW_NUMBER() OVER (PARTITION BY cte1.QuoteID, cte1.PolicyNumbe cte2.LossYear, cte2.AccidentMonth ORDER BY (SELECT 0))=1 THEN cte1.PaidLosses 
ELSE 0 
END as PaidLosses. 

結果は次のようになります。

QuoteId PolicyNumber AccidentYear AccidentMonth ClassCode 

PaidLosses 
191289 PACA1001776-0 2015 4 50228 26657 
191289 PACA1001776-0 2015 4 67228 0 
191289 PACA1001776-0 2015 9 50228 16718 
191289 PACA1001776-0 2015 9 67228 0 
191289 PACA1001776-0 2016 1 50228 3445 
191289 PACA1001776-0 2016 1 67228 0 

はあなたが必要wnatということですか?

+0

ありがとうございました!!!!! – Oleg

+0

あなたは歓迎です:) –

関連する問題