假设您现有的视图名为 TheSummary。将其重命名为 x_TheSummary
创建一个带有重命名视图的旧名称的新视图。
create view TheSummary as
select x.*, g.totalPrice
from x_TheSummary x
join
(
select typeId, sum(price) as totalPrice
from x_TheSummary
group by typeId
) as g on g.typeId = x.typeId
这样,您的新视图不会对依赖于旧视图名称的应用程序进行任何重大更改
顺便说一句,由于您使用的是 SQL Server 2008,因此您也可以使用以下窗口查询,但上面的查询适用于不支持窗口的 RDBMS。
create view TheSummary as
select x.*, sum(totalPrice partition by typeId) as totalPrice
from x_TheSummary x
简单多了
@ivan-83 一秒钟,我认为 SQL Server 2008 不支持分区窗口。我对这种在 SQL 2008 上不起作用的构造(运行总数)想了太多,但它在 SQL 2012 上起作用。
SELECT i, sum(i) over(order by i) as rt
FROM (values(1),(9),(7),(6)) as x(i)
正在运行的总查询在 SQL 2008 上不起作用:http ://www.sqlfiddle.com/#!3/d41d8/1539
它现在适用于 SQL 2012:http ://www.sqlfiddle.com/#!6/d41d8/111
输出:
| I | RT |
----------
| 1 | 1 |
| 6 | 7 |
| 7 | 14 |
| 9 | 23 |
综上所述,SQL Server 2012 不仅支持分区开窗,还支持逐行开窗。SQL Server 2008 仅支持分区窗口。所以@ivan-83 解决方案也有效。为此,我赞成你的回答