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 の合計は : 合計 = (ラジ + ラメッシュ + プージャ + スワティ + キング) の量
  • SWATI の場合 :Total=swati のみの量。
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 で試すことができます) は、大規模なデータセットではおそらくあまり効率的ではないことに注意してください。これは 1 回限りのクエリとして機能する可能性があり、その場合は、テーブルが更新されるたびに合計を更新するように編成する (つまり、トリガーを使用する) 方がよいでしょう。

于 2012-04-21T18:35:31.043 に答える