0

我是 SQL 新手,并试图修改 Create View 脚本以从 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 个每月行项目中每个项目的年度金额。新的年度列应位于金额列的右侧,并且每一行应包含该年度金额列的总和。例如:

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 then [Annual] = resultset total 时,但似乎无法将其可视化。提前感谢您的输入。

4

2 回答 2

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>
于 2013-05-23T17:41:08.030 回答
0

由于您正在查看 MSDN,因此我假设使用 SQL Server 作为此答案;

要获得按年份汇总的年度列,您可以使用SUM() OVER ();

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

一个用于测试的 SQLfiddle

于 2013-05-23T17:48:37.540 回答