En supposant que votre vue existante est nommé TheSummary. Renommez-le en x_TheSummary
Créez une nouvelle vue qui porte l'ancien nom de la vue renommée.
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
De cette façon, votre nouvelle vue pas de changements de rupture à des applications qui dépend ancien nom de vue
Par ailleurs, puisque vous utilisez SQL Server 2008, vous pouvez utiliser le fenêtrage suivant -query aussi, la requête ci-dessus fonctionne sur les SGBDR non-fenêtrables.
create view TheSummary as
select x.*, sum(totalPrice partition by typeId) as totalPrice
from x_TheSummary x
Il est beaucoup plus simple
@ ivan-83 Pour une seconde, je pensais que SQL Server 2008 ne prend pas en charge fenêtrage sur la partition. Je pense trop de cette construction (total en cours d'exécution) qui ne fonctionne pas sur SQL 2008, mais il fonctionne sur SQL 2012.
SELECT i, sum(i) over(order by i) as rt
FROM (values(1),(9),(7),(6)) as x(i)
La requête en cours d'exécution totale ne fonctionne pas sur SQL 2008: http://www.sqlfiddle.com/#!3/d41d8/1539
Et cela fonctionne maintenant sur SQL 2012: http://www.sqlfiddle.com/#!6/d41d8/111
Sorties:
| I | RT |
----------
| 1 | 1 |
| 6 | 7 |
| 7 | 14 |
| 9 | 23 |
Pour résumer, SQL Server 2012 prend en charge non seulement fenêtrage sur la partition, un LSO prend en charge le fenêtrage ligne par ligne. SQL Server 2008 prend en charge la fenêtre sur la partition uniquement. Les solutions @ ivan-83 fonctionnent donc aussi. Pour cela, j'attaque votre réponse
Cela a fonctionné comme un charme. Ravi d'apprendre quelque chose de nouveau. Je vous remercie. – no9