2012-04-21 2 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 

Я хочу все каждый человек таким образом, что она дает общую сумму количества его потомкам. Для примера.

  • для РАЯ всего будет: общая сумма = (Раджа + Ramesh + пуджи + Свазьте + король)
  • для Свати: Total = сумма только Свати.

ответ

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), вероятно, не очень эффективно на большом наборе данных. Это может быть одноразовый запрос, и тогда было бы лучше организовать обновление итогов каждый раз, когда таблица будет обновлена, т. Е. С помощью триггеров.

Смежные вопросы