2014-07-09 295 views
3

我想要做的SQL Server上的這個查詢累積計算

我可以循環做到這一點,但想知道是否是具有更好的性能

我有表,任何簡單的方法推薦, 方案1:如果A有5個點並且引用B有7個,那麼查詢應該顯示12點爲A(A點+ B點) 方案2:如果A有5並且引用B有7和A參考C有3分,B參考D有4分等等。 在這種情況下A取所有人的分數A + B + C + D

我的表看起來像這樣

參考文獻

SID BIGINT

SNAME VARCHAR(50)

sPoints詮釋

sRefID BIGINT

data

回答

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 
+0

謝謝,但我不能使用左外部在此查詢一起加入到其他表。任何工作? – asmgx

+0

@asmgx你想在這個查詢中使用'left outer join'爲什麼? – Sathish

+0

在實際的情況下,積分將從另一個表格計算出來,如果A爲空這意味着A有0點,爲沒有積分的人得到總和(積分),這需要加入 – asmgx