SQL Server 2012:加权平均计算

SQL Server 2012:加权平均计算,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,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

我试图计算表中某些数据的加权平均到期日

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: 对于LID=1,1乘以CurrentUPB*RemainingMonths 2对SaleEventID=1的每一行执行此操作 3上述计算的总和=411220000.00美元=A 4求所有当前UPB之和,其中SaleEventID=1等于$2067000.00=B 5然后除以A/B=$198.95,这是我的WAM

我需要考虑的是,在我的表中,我将有很多贷款,并且每个贷款都不会归咎于相同的SaleEvEnd值,而不是主键

。 到目前为止,我的问题是:

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

我不知道如何执行步骤2和步骤4。非常感谢您的帮助和示例。

如果我正确理解您的问题,以下是答案

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

如果我没弄错你的问题,下面是答案

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

计算WAM和WAIR非常简单。用Excel思考产品

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

计算WAM和WAIR非常简单。用Excel思考产品

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


什么是LoanA?刚刚更新的问题没有在网格中键入信息。$411220000/$3967000=$103.6602 198.95从何而来?抱歉@xQbert从我的excel中抓到了这一点。有两行额外的值是$411220000.00/$2067000.00=198.95。我已经更新了问题,以防有人遇到此问题。LoanA是什么?刚刚更新问题没有在网格中键入信息。$411220000/$3967000=$103.6602 198.95是从哪里来的?抱歉@xQbert从我的excel中抓到了这一点。有两行额外的值是$411220000.00/$2067000.00=198.95。我已经更新了问题,以防有人碰到这个。哇。你是个职业选手,太棒了!非常感谢。John@DVT不。刚刚在银行业工作了几十年:John,我怎样才能添加WHERE子句来将SaleEventID传递到查询中。我计划在一个网站上使用它,并从querystring中提取SaleEventID。@AlexP请参阅更新的answerWow。你是个职业选手,太棒了!非常感谢。John@DVT不。刚刚在银行业工作了几十年:John,我怎样才能添加WHERE子句来将SaleEventID传递到查询中。我计划在一个网站上使用它,并从querystring中提取SaleEventID。@AlexP请参阅更新的答案