我使用以下计算生成了一列:
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]时,程序不理解参考。是否可以在将来的计算中使用这些计算列?
答案 0 :(得分:4)
不允许直接这样做。您可以在另一个级别定义别名。我倾向于在cases where it is permitted中使用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)
答案 1 :(得分: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
放在定义之前。