从结果集创建SQL视图列

时间:2013-05-23 17:33:03

标签: sql view procedure

我是SQL的新手,并尝试修改Create View脚本以从select语句结果集中添加新列我已经搜索了很多但是还没有看到一个很好的例子。

这是select语句:

select lease_id, year(posting_date) as years1, SUM(amount) as Annual 
from la_tbl_lease_projection
group by year(posting_date), lease_id
order by lease_id

复杂因素是这个。结果集中的年度列是lease_id的年度总支出。但是,在我添加列的视图中,费用按月列出。因此,lease_id 100001在2010年,2011年等有12行。我希望视图让新列显示12个月度订单项中的每一个的年度金额。新的年度列应位于金额列的右侧,每行应包含该年度金额列的总和。 e.g:

Lease_id      Posting_Date         Amount        Annual

100001        2010-01-01             $25           $300

100001        2010-02-01             $25           $300

etc...............

我添加的视图是来自多个表的相当复杂的连接和联合。我不想为我的结果集创建一个新表,而是想使用存储过程访问它,除非有更好的选择。 MSDN说临时表和表变量在视图中不起作用,因此不是一个选项。

我认为这可以通过诸如“当years1 = years1 AND lease_id = lease_id然后[Annual] =结果集总计,但似乎无法将其可视化的事情来完成。提前感谢您的输入。

2 个答案:

答案 0 :(得分:0)

我认为派生表可以为您提供类似的功能:

select blah, blah2, blah3, ..., a.annual
from
<Long complicated set of joins>
join
  (select lease_id, year(posting_date) as years1, SUM(amount) as Annual 
  from la_tbl_lease_projection
  group by year(posting_date), lease_id
  order by lease_id) a 
    on sometable.lease_id = a.lease_id and year(sometable .posting_date) = a.years1
Where <complex where conditions>

答案 1 :(得分:0)

由于您正在查看MSDN,我假设SQL Server得到了这个答案;

要获得年度总额的年度总和,您可以使用SUM() OVER ();

SELECT *, SUM(Amount) OVER (PARTITION BY YEAR(Posting_Date)) Yearly
FROM la_tbl_lease_projection;

An SQLfiddle to test with