2012-04-21 94 views
1

我有如下表:更新列值

sno name pid amount total 
1 Arif 0 100 null 
2 Raj  1 200 null 
3 Ramesh 2 100 null 
4 Pooja 2 100 null 
5 Swati 3 200 null 
6 King 4 100 null 

我总想每个人都这样,它给它的后代的数量的总和。 例如。

  • 为RAJ总将是:总=仅斯瓦特的量:总=(拉吉+拉梅什+ POOJA +斯瓦特+王)
  • 为SWATI量。

回答

2

你可以尝试这样的事:

WITH hierarchified AS (
    SELECT 
    sno, 
    amount, 
    hierarchyID = CAST(sno AS varchar(500)) 
    FROM yourTable 
    WHERE pid = 0 
    UNION ALL 
    SELECT 
    t.sno, 
    t.amount, 
    hierarchyID = CAST(h.hierarchyID + '/' + RTRIM(t.sno) AS varchar(500)) 
    FROM yourTable t 
    INNER JOIN hierarchified h ON t.pid = h.sno 
) 
UPDATE yourTable 
SET total = t.amount + ISNULL(
    (
    SELECT SUM(amount) 
    FROM hierarchified 
    WHERE hierarchyID LIKE h.hierarchyID + '/%' 
), 
    0 
) 
FROM yourTable t 
INNER JOIN hierarchified h ON t.sno = h.sno; 

注意这个查询(你可以尝试on SQL Fiddle)可能不会是一个大的数据集非常有效。它可以作为一次性查询,然后在每次更新表格时(即使用触发器)组织更新总计可能会更好。