Sql server 如何在SQL中添加特定行的计算列
我想添加一个计算列(持久化),它是同一组类别(如下面的销售订单)的总行数。您将如何在SQL Server中执行此操作Sql server 如何在SQL中添加特定行的计算列,sql-server,tsql,Sql Server,Tsql,我想添加一个计算列(持久化),它是同一组类别(如下面的销售订单)的总行数。您将如何在SQL Server中执行此操作 SalesOrder Amount Total(calculated) 100 10 25 100 15 25 101 20 45 101 25 45 102 30
SalesOrder Amount Total(calculated)
100 10 25
100 15 25
101 20 45
101 25 45
102 30 65
102 35 65
用于存储自动维护的预计算聚合的最佳机制是索引视图,这不可能通过持久化计算列实现(您可以在计算列中使用标量UDF来计算结果,但这无法持久化,而且此类计算列通常会对性能造成不利影响,因为它们会强制进行RBAR计算并阻止并行性) 然后,将预先计算聚合并将其存储在视图中。您的查询将需要在视图中加入。您可能需要使用
NOEXPAND
提示,以确保实际使用了预先计算的聚合,并且在运行时不会重新计算它们。For SQL server 2012
CREATE TABLE #t (saleOrder int , amount int)
INSERT INTO #t VALUES
(100,10)
,(100,15)
,(101,20)
,(101,25)
,(102,30)
,(102,35)
SELECT *
,SUM(amount) OVER (PARTITION BY saleorder) as [total]
FROM #t
结果:
saleOrder | amount | total
==========================
100 | 10 | 25
100 | 15 | 25
101 | 20 | 45
101 | 25 | 45
102 | 30 | 65
102 | 35 | 65
太好了,谢谢!stackexchange的速度太快了。@el_kraken,如果这个答案对你有用,请接受这个答案。如果他们决定不进行预计算,这实际上在2005+年有效。
saleOrder | amount | total
==========================
100 | 10 | 25
100 | 15 | 25
101 | 20 | 45
101 | 25 | 45
102 | 30 | 65
102 | 35 | 65