1

我生成了一个具有以下计算的列:

SELECT b.[CUSIP NUMBER],
       b.[ORIGINAL BALANCE],
       b.[ORIGINAL WA MATURITY],
       b. [PASS THRU RATE],
       b.[ORIGINAL BALANCE] * ( ( b.[PASS THRU RATE] / 12 ) * ( 1 + power (( b.[PASS THRU RATE] / 12),  b.[ORIGINAL WA MATURITY] ) ) / ( 1 + (power (( b.[PASS THRU RATE] / 12 ), b.[ORIGINAL WA MATURITY] )))) Monthlypayment
FROM   DBO.mbs012013 a,
       dbo.mbs022013 b
WHERE  a.[CUSIP NUMBER] = b.[CUSIP NUMBER] 

我想在新计算中使用计算列“MonthlyPayment”。如何在新计算中引用它?当我写 Select [MonthlyPayment] 程序不理解参考。是否可以在以后的计算中使用这些计算列?

4

2 回答 2

4

不,这是不允许的。不过,您可以在另一个级别定义别名。我倾向于在允许CROSS APPLY情况下使用(如这里)。但是,如果在表达式中使用窗口函数,则该APPLY方法不起作用。

SELECT b.[CUSIP NUMBER],
       b.[ORIGINAL BALANCE],
       b.[ORIGINAL WA MATURITY],
       b. [PASS THRU RATE],
       Monthlypayment,
       Monthlypayment2
FROM   DBO.mbs012013 a
       JOIN dbo.mbs022013 b
         ON a.[CUSIP NUMBER] = b.[CUSIP NUMBER]
       CROSS APPLY (SELECT b.[ORIGINAL BALANCE] * ( ( b.[PASS THRU RATE] / 12 ) * ( 1 + power (( b.[PASS THRU RATE] / 12 ), b.[ORIGINAL WA MATURITY]) ) / ( 1 + ( power (( b.[PASS THRU RATE] / 12 ), b.[ORIGINAL WA MATURITY]) ) ) )) CA(Monthlypayment)
       CROSS APPLY(SELECT 1 + Monthlypayment) CA2(Monthlypayment2) 
于 2013-06-19T20:16:08.267 回答
1

我假设您的意思是在同一个查询中。答案是肯定的。您需要使用 CTE(with语句)或子查询:

select *
from (SELECT b.[CUSIP NUMBER],
             b.[ORIGINAL BALANCE],
             b.[ORIGINAL WA MATURITY],
             b. [PASS THRU RATE],
             b.[ORIGINAL BALANCE] * ( ( b.[PASS THRU RATE] / 12 ) * ( 1 + power (( b.[PASS THRU RATE] / 12),  b.[ORIGINAL WA MATURITY] ) ) / ( 1 + (power (( b.[PASS THRU RATE] / 12 ), b.[ORIGINAL WA MATURITY] )))) Monthlypayment
      FROM   DBO.mbs012013 a join
             dbo.mbs022013 b
             on a.[CUSIP NUMBER] = b.[CUSIP NUMBER]
     ) t

我还修复了您的连接语法以使用更可取的on子句。

如果您希望它可用于其他查询,请考虑使用此列创建视图。只是放在create view <some name> as定义之前。

于 2013-06-19T20:15:23.683 回答