У меня есть требование. Мне дали следующую таблицу
DownLineid UplineId Name DirectResources
1 2 Sarvesh 7
2 NULL Admin 5
3 2 Lonesh 10
4 2 Swapna 2
5 2 Priyanka 12
8 2 Sumi 1
6 5 Deepak 10
7 5 Agnijita 6
9 5 Me 1
Сценарий «UplineId» означает «топ-менеджеры», а «нижестоящие» означает «менеджеры, работающие под руководством Upliners»
Моя задача - узнать общие ресурсы для Upliners. Желаемый вывод
UplineId DownLineid Name DirectResources TotalResources
NULL 2 Admin 5 54
2 3 Lonesh 10 null
2 5 Priyanka 12 17
5 7 Agnijita 6 null
5 6 Deepak 10 null
5 9 Me 1 null
2 1 Sarvesh 7 null
2 8 Sumi 1 null
2 4 Swapna 2 null
На самом деле, Админ является верхним и имеет все ресурсы. Таким образом, общее количество всех ресурсов составляет 54.
Агниджита, Дипак и Я находятся под Приянкой, и отныне их число равно 17 (6 + 10 + 1).
Для всех остальных нет нижестоящих, впредь это ноль там.
Моя попытка пока что
declare @t table(DownLineid int,UplineId int,Name varchar(10),DirectResources int)
insert into @t
select 1,2,'Sarvesh',7 union all select 2,Null,'Admin',5 union all
select 3,2,'Lonesh',10 union all select 4,2,'Swapna',2 union all
select 5,2,'Priyanka',12 union all select 8,2,'Sumi',1 union all
select 6,5,'Deepak',10 union all select 7,5,'Agnijita',6 union all
select 9,5,'Me',1
select * from @t
;with cte AS
(
SELECT
CAST(e.Name AS VARCHAR(1000)) AS [Path]
,e.UplineId
,e.DownLineid
,e.Name
,0 AS [Level]
,e.DirectResources FROM @t e WHERE e.UplineId IS NULL
UNION ALL
SELECT CAST(c.[Path] + '/' + e.Name AS VARCHAR(1000)) AS [Path]
,e.UplineId
,e.DownLineid
,e.Name
, c.[Level]+1 AS [Level]
,e.DirectResources
FROM @t e
JOIN cte c ON e.UplineId = c.DownLineid
)
select
UplineId
,DownLineid
, REPLICATE(' ', [Level]) + Name as [Name]
,DirectResources
FROM cte
ORDER BY [Path]
Я изо всех сил пытаюсь найти общие ресурсы. Я использую SQL Server 2005.
Пожалуйста, помогите мне.
Заранее спасибо.