suj*_*jai 1 sql sql-server sql-server-2008-r2
CREATE VIEW dbo.myview1 As
SELECT
a.Id ,
a.Name ,
a.Age ,
CASE
WHEN b.PmtSched ='Monthly' THEN 12
WHEN b.PmtSched ='Quarterly' THEN 4
WHEN b.PmtSched ='Semi-Annual' THEN 2
WHEN b.PmtSched ='Annually' THEN 1
ELSE 12
END AS ABC,
SUM(a.Amount) *50 as TotalAmount ,
(a.AmtSpent - TotalAmount) * ABC as TOTALSPENDS
FROM dbo.User a join dbo.Details b on a.Id = b.Id
Run Code Online (Sandbox Code Playgroud)
这里ABC和TotalAmount是别名列,需要在视图中使用计算,我无法使用它们.如何实现这一点?我们有什么方法可以做到这一点,或者我们不能?请帮助.
解决问题的简单方法是重复表达式,使用子查询或使用CTE.
但是,更智能的方法是为付款计划添加参考表.这看起来像:
create table PaymentSchedules (
PaymentScheduleId int identity(1, 1) primary key,
ScheduleName varchar(255),
FrequencyPerYear float -- this could be less often than once per year
);
Run Code Online (Sandbox Code Playgroud)
然后视图看起来像:
CREATE VIEW dbo.myview1 As
SELECT a.Id, a.Name, a.Age, ps.FrequencyPerYear,
SUM(a.Amount) * 50 as TotalAmount,
(a.AmtSpent - SUM(a.Amount) * 50) * ps.FrequencyPerYear as TOTALSPENDS
FROM dbo.User a join
dbo.Details b
on a.Id = b.Id join
dbo.PaymentSchedules ps
on ps.PaymentScheduleId = a.PamentScheduleId;
Run Code Online (Sandbox Code Playgroud)