既存のビューの名前が 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 ソリューションも機能します。このため、私はあなたの答えに賛成します