Мне нужно, чтобы Родитель суммировал суммы ребенка, а ребенок суммировал своих детей и т. Д. - PullRequest
0 голосов
/ 10 июля 2019

У меня есть таблица с двумя столбцами accountCode, allocBudget

! (https://drive.google.com/open?id=1kaGlpar7tyKmqUSqrLEgVIdz4LLzQt3c)

Что я хочу сделать, так это чтобы каждый родитель находился в области своих распределений, общие ассигнования его дочернего элемента и для дочернего элемента также будут в области его распределений общие ассигнования его дочерних элементов, и поэтому последний дочерний элемент получает его только выделение

select accountCode,sum(allocationBudget)
from T1
group by accountCode
having SUBSTRING(accountCode,1,len(accountCode))=accountCode

Требуемый результат, как это: ! (https://drive.google.com/open?id=1mUDLWFQU9bYsuD4IhMyxExxeyaDOzWSL)

Надеюсь, это понятно, и я смог донести до вас эту идею. заранее спасибо

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Если я предполагаю, что первые 7 цифр из вашего AcountCode - это родительский идентификатор, следующий скрипт должен дать ожидаемый результат.

SELECT A.AcountCode,
CASE 
    WHEN B.AcountCode IS NOT NULL THEN B.Total 
    ELSE A.AllocationBudget 
END AllocationBudget
FROM your_table A
LEFT JOIN (
    SELECT 
    LEFT(CAST(AcountCode AS VARCHAR(MAX)),7) AcountCode,
    SUM(AllocationBudget) Total 
    FROM your_table 
    GROUP BY LEFT(CAST(AcountCode AS VARCHAR(MAX)),7)
)B ON A.AcountCode = B.AcountCode 
1 голос
/ 10 июля 2019

Вы можете использовать самостоятельное соединение.

select
    T1.accountCode,
    SUM(T2.allocationBudget) as allocationBudget
from T1
left join T1 as T2 on SUBSTRING(T2.accountCode,1,LEN(T1.accountCode)) = T1.accountCode
group by T1.accountCode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...