在sql server中累计计算

时间:2014-07-09 04:01:45

标签: sql sql-server database tsql

我想在sql server上执行此查询

我可以通过循环执行此操作,但想知道是否有更简单的方法可以提供更好的性能

我有推荐表, 场景1:如果A有5分并且参考B有7分,则查询应该显示12分A(A分+ B分) 场景2:如果A有5并且引用具有7的B并且A引用具有3个点的C并且B引用具有4个点的D等等。 在这种情况下,A取得所有人的A + B + C + D

我的表看起来像这样

参考文献

sID bigint

sName varchar(50)

sPoints int

sRefID bigint

data

1 个答案:

答案 0 :(得分:4)

您可以使用递归SQL执行此操作。试试这个:

With CTETable (sID, sRefID, sName, sPoints)
AS
(
SELECT Refs.sID, Refs.sRefID, Refs.sName, Refs.sPoints FROM Refs 
UNION ALL
SELECT Refs.sID, Refs.sRefID, CTETable.sName, Refs.sPoints 
FROM Refs INNER JOIN CTETable ON CTETable.sID = Refs.sRefID
)
Select sName, Sum(sPoints)
From CTETable
Group By CTETable.sName

这将是:

sName   TotalPoints
A   360
B   210
C   130
D   80
E   90
F   90
G   60
H   40
I   20
J   50