如果有可能的话,把数据库重新设计一下,让代理ID的编码有意义,分出层次。例如:代理ID 姓名 积分 上级代理ID
01 a 123 00
010302 b 32 0103
0103 c 55 01
0504 d 88 05
05 e 115 00
050406 f 9 0504
01 a 123 00
010302 b 32 0103
0103 c 55 01
0504 d 88 05
05 e 115 00
050406 f 9 0504
解决方案 »
- sql 获取每个车辆的最后一条记录
- 如何显示性别
- 如何实现:选择2月份,点查询按钮可以得到2月的每一天
- 关于排序问题
- 请教——SQL server 数据库是做什么的?怎么往里面写数据?up有分(接分人请进)up有分(邹建 水影注意接分)
- 从文本导入sqlserver2000,要求转变格式
- 请教高手,如何知道sql 2000数据库的触发器是否在运行???急!!!
- 请问:Sql server2000 企业版能否在windows xp 上安装,windows 2003是否也支持????
- vfp6.0 如何实现数据库备份
- 概念模型与关系模型有什么不同?
- case语句问题 送30分 加急
- SQL高级语法,别人考了我,我不知道,您哪
(代理ID int,
用户姓名 varchar(10),
积分 int,
上级代理ID int)
insert a
select 1,'张三',123,0 union
select 2,'李四',32,3 union
select 3,'王五',55,1 union
select 4,'赵六',88,5 union
select 5,'小军',115,0 union
select 6,'小敏',9,4 union
select 7,'小强',54,6 union
select 8,'王六',100,7 union
select 9,'天红',20,6--原始数据:
代理ID 用户姓名 积分 上级代理ID
----------- ---------- ----------- -----------
1 张三 123 0
2 李四 32 3
3 王五 55 1
4 赵六 88 5
5 小军 115 0
6 小敏 9 4
7 小强 54 6
8 王六 100 7
9 天红 20 6(所影响的行数为 9 行)
select b.*,isnull((select (case 上级代理ID when 0 then 代理ID else 上级代理ID end) from a where a.代理ID=b.上级代理ID),代理ID) upid1 into #a from a b
select b.*,(select (case 上级代理ID when 0 then 代理ID else 上级代理ID end) from #a where #a.代理ID=b.upid1) upid2 into #aa from #a b
select b.*,(select (case 上级代理ID when 0 then 代理ID else 上级代理ID end) from #aa where #aa.代理ID=b.upid2) upid3 into #aaa from #aa b--层数每多一层就增加一行类似上面的语句.select * from #aaa代理ID 用户姓名 积分 上级代理ID upid1 upid2 upid3
----------- ---------- ----------- ----------- ----------- ----------- -----------
1 张三 123 0 1 1 1
2 李四 32 3 1 1 1
3 王五 55 1 1 1 1
4 赵六 88 5 5 5 5
5 小军 115 0 5 5 5
6 小敏 9 4 5 5 5
7 小强 54 6 4 5 5
8 王六 100 7 6 4 5
9 天红 20 6 4 5 5(所影响的行数为 9 行)select upid3 as 代理ID,sum(积分) from #aaa group by upid3代理ID 总积分
----------- -----------
1 210
5 386(所影响的行数为 2 行)