采用sql2005,对一个树结构的表,如何取各级节点相对下级节点的数值之和,即节点值汇总? 谢谢!
解决方案 »
- sql查询语句
- 如何同步数据库中的几个表
- SQL 日期减一年怎么写??
- 关于MySQL用户登陆和创建数据库的问题!!
- sqlserver2000服务器恢复的问题
- sql server中附加Access数据库文件遇到问题在线求解!!
- JSP连接数据库的问题,高手帮忙,急救!!!
- 哪里有powerdesign的教程
- 配置数据库链接的问题!请各位大侠帮忙看一下!多谢!
- 大家帮我看看这个sql语句的效能问题~!100cent
- 崩溃了,再次请教如何查询出表中nvarchar数据类型字符串相同,并且大于一定数量的数据?的问题
- 我把access的表导入到sql server,access中主键是autonumber类型,sql server中应该int类型,属性identity(1,1)才对,但identity没有了怎么办?
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10),Price INT)
INSERT @t SELECT '001',NULL ,'山东省',20
UNION ALL SELECT '002','001','烟台市',30
UNION ALL SELECT '004','002','招远市',40
UNION ALL SELECT '003','001','青岛市',10
UNION ALL SELECT '005',NULL ,'四会市',15
UNION ALL SELECT '006','005','清远市',30
UNION ALL SELECT '007','006','小分市',80;WITH Liang AS
(
SELECT
ID,
PID,
Name,
Price,
TotalPrice=Price,
Path=CAST(Name AS VARCHAR(MAX)),
level=1
FROM @t
WHERE PID IS NULL
UNION ALL
SELECT
A.ID,
A.PID,
A.Name,
A.Price,
B.TotalPrice+A.Price,
CAST(B.Path+'.'+A.Name AS VARCHAR(MAX)),
B.level+1
FROM @t AS A
JOIN Liang AS B
ON A.PID=B.ID
)
SELECT
REPLICATE(' ',level)+'|--'+Name,
TotalPrice
FROM Liang
ORDER BY Path
create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
insert into tb values('001' , null , '广东省')
insert into tb values('002' , '001' , '广州市')
insert into tb values('003' , '001' , '深圳市')
insert into tb values('004' , '002' , '天河区')
insert into tb values('005' , '003' , '罗湖区')
insert into tb values('006' , '003' , '福田区')
insert into tb values('007' , '003' , '宝安区')
insert into tb values('008' , '007' , '西乡镇')
insert into tb values('009' , '007' , '龙华镇')
insert into tb values('010' , '007' , '松岗镇')
go --查询指定节点及其所有子节点的函数
create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
as
begin
declare @level int
set @level = 1
insert into @t_level select @id , @level
while @@ROWCOUNT > 0
begin
set @level = @level + 1
insert into @t_level select a.id , @level
from tb a , @t_Level b
where a.pid = b.id and b.level = @level - 1
end
return
end
ID PID NAME VALUE LEVEL
0 x1 1
1 0 x2 2
2 1 x3 100 3
3 1 x4 200 3
希望递归得到
ID PID NAME VALUE LEVEL
0 x1 300(x1的下级节点之和) 1
1 0 x2 300(x2的下级节点之和) 2
2 1 x3 100 3
3 1 x4 200 3