我有一個需求。我一直在考慮下表獲取總資源數量所需的幫助(SQL Server 2005)
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意味着高層管理人員和Downlines的指經理下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.
Agnijita,Deepak和我在Priyanka下,從此計數是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.
請幫幫我。
在此先感謝。
寫了一段時間,回來在你的榜樣,'Admin'的總和包括他自己的資源,但'Priyanka'的一個沒有。它的目的是? – Quassnoi 2009-12-15 15:51:46
如果您計劃遷移到SQL Server 2008,看起來像您可以使用hierarchyIDs(http://blogs.msdn.com/manisblog/archive/2007/08/17/sql-server-2008-hierarchyid.aspx) – ram 2009-12-16 12:36:22
使用[group by] [2]和sum [3]子句的[self join] [1]看起來是正確的解決方案。 [1]:http://databases.about.com/od/sql/a/selfjoins.htm [2]:http://technet.microsoft.com/en-us/library/ms177673.aspx [3 ]:http://doc.ddart.net/mssql/sql70/setu-sus_18.htm – Oded 2009-12-15 15:21:43