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,总计将是:总计 =(raj+ramesh+pooja+swati+king)的数量
  • 对于斯瓦蒂:总计=仅斯瓦蒂的数量。
4

1 回答 1

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;

请注意,此查询(您可以在 SQL Fiddle 上尝试)在大型数据集上可能效率不高。它可以作为一次性查询,然后每次更新表时组织更新总数可能会更好,即使用触发器。

于 2012-04-21T18:35:31.043 回答