2016-12-02 93 views
1

テーブル内の一部のデータの加重平均成熟度を計算しようとしています。SQL Server 2012:加重平均計算

SaleEventID LID(PK) CurrentUPB   Interest Rate RemainingMonths 
1   1   $100,000.00   6.100%   11.00 
1   2   $67,000.00   6.200%   360.00 
1   3   $1,400,000.00  6.300%   240.00 
1   4   $500,000.00   7.000%   100.00 
2   5   $1,400,000.00  7.100%   240.00 
2   6   $500,000.00   7.000%   100.00 

は、だから私は達成しようとしている式がある(WAM):
1)乗算CurrentUPB * LIDのためのRemainingMonths = 1
2)がないと一致する行ごとに、WHERE SaleEventID = 1
3)SUM上記計算$2,067,000.00 = B
5に等しいSaleEventID = 1)そして私のWAM

であるA/B = $198.95を分割= $411,220,000.00
4)合計=全てCurrentUPB

SELECT l.*, A/B FROM AS WAM 
FROM (SELECT LSX_DC_Loans l 
     (SELECT CurrentUPB * RemainingMonths FROM l WHERE LID = 1 
     ) AS A 
     (SELECT SUM (CurrentUPB) CurrentUPB FROM LSX_DC_Loans 
     WHERE SaleEventID = 1 
     ) AS B 
FROM l 
) l 
:私は今のところ私のクエリ

私のテーブルに、私は多くのローンを持っており、それぞれが(主キーではありません)同じSaleEventID値を帰属されないことになることを考慮する必要があり

私はステップ2を行う方法を考え出すのに苦労しています。& 4.何か助け、非常に高く評価された例。私が正しくあなたの質問を理解していれば

+0

ロアーナは何ですか? – DVT

+0

ちょうどグリッドの情報をタイプミスした質問が更新されました。 – UserSN

+0

$ 411,220,000/$ 3,967,000 = $ 103.6602 wheres 198.95から来た? – xQbert

答えて

4

あるとWAIRは非常に単純です。考えてみてExcelでSUMPRODUCT()

Declare @YourTable table (SaleEventID int,LID int,CurrentUPB money,[Interest Rate] money,RemainingMonths money) 
Insert Into @YourTable values 
(1,1,100000.00,6.100, 11.00), 
(1,2,67000.00,6.200, 360.00), 
(1,3,1400000.00,6.300, 240.00), 
(1,4,500000.00,7.000, 100.00), 
(2,5,1400000.00,7.100, 240.00), 
(2,6,500000.00,7.000,100.00) 


Select SaleEventID 
     ,UPB = sum(CurrentUPB) 
     ,WAM = sum(CurrentUPB*RemainingMonths)/sum(CurrentUPB) 
     ,WAIR = sum(CurrentUPB*[Interest Rate])/sum(CurrentUPB) 
From @YourTable 
Where SaleEventID = @Event 
Group By SaleEventID 

戻り

SaleEventID UPB   WAM   WAIR 
1   2067000.00 198.9453 6.4564 
2   1900000.00 203.1578 7.0736 
+0

うわー。あなたはプロです。 – DVT

+0

驚くばかり!ありがとうジョン – UserSN

+0

@DVTいいえ。ちょうど銀行業界で数十年を費やしました:) –

0

は、ここWAMを計算するのに答え

SELECT 
    l.* 
    , l1.A/l2.B AS WAM 
FROM 
    LXC_DC_Loans l 
    CROSS APPLY (SELECT SUM(CurrentUPB * RemainingMonths) AS A FROM LSX_DC_Loans WHERE SaleEventID=l.SaleEventID) l1 
    CROSS APPLY (SELECT SUM(CurrentUPB) AS B A FROM LSX_DC_Loans WHERE SaleEventID=l.SaleEventID) l2