急!求一SQL语句

snowcloud2002 2004-01-30 03:53:14
表名:Test
字段名:
id name parentid
1 aa 0
2 bb 0
3 aa1 1
4 aa2 3
5 bb1 2
6 bb2 5


我想先显示parentid=0的记录然后依次显示parentid=id的记录

如显示下面效果:
aa
aa1
aa2
bb
bb1
bb2

求这个SQL语句。
...全文
31 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
giggsbj 2004-02-02
  • 打赏
  • 举报
回复
sqlserver中:
select name from
(select id, name ,parentid,case when parentid=0 then id else parentid end as parentid2 from test ) as aa

order by parentid2,parentid,id

access中有个iif函数(可以替换case when )不再多写了
zjcxc 元老 2004-02-02
  • 打赏
  • 举报
回复
ACCESS的话,就在表中增加一个sortid字段.
然后用程序维护该字段值,使它的值类似于楼上的.
j9988 2004-02-01
  • 打赏
  • 举报
回复
改表结构:
id name parentid
01 aa 0
02 bb 0
0103 aa1 01
010304 aa2 0103
0205 bb1 02
020506 bb2 0205

这样一句SELECT就行了
select * from table order by id
snowcloud2002 2004-02-01
  • 打赏
  • 举报
回复
我想用sql语句实现不想使用存储过程,因为有可能分发给别人时,他的空间不支持sql server只能使用access,那样不就不能用了吗?

希望大家能给我sql语句的解决方案,谢谢!分不够我再给
hglhyy 2004-01-30
  • 打赏
  • 举报
回复
楼主的要求的确没有说清楚,你的要求和你要求的结果不相符
如果你写的要求,用楼上 shuiniu(飞扬的梦)的测试过的就行了

如果要你的结果那样,用下面的就行了:
select name from test order by name
Jianli2004 2004-01-30
  • 打赏
  • 举报
回复
select name from @test a where parentid=0 or parentid in (select id from @test)
-狙击手- 2004-01-30
  • 打赏
  • 举报
回复
其实你还是没说清你要的结果是什么规则,要是像你说的要那种效果的话,在sql中只要一个order by 就行了,
xwfjw 2004-01-30
  • 打赏
  • 举报
回复
表名:Test
字段名:
id name parentid
1 aa 0
2 bb 0
3 aa1 1
4 aa2 3
5 bb1 2
6 bb2 5


我想先显示parentid=0的记录然后依次显示parentid=id的记录

如显示下面效果:
aa
aa1
aa2
bb
bb1
bb2
create table cc(id int,name char(10),parentid int)
drop table cc
insert cc(id,name,parentid) values(1,'aa',0)
insert cc(id,name,parentid) values(2,'bb',0)
insert cc(id,name,parentid) values(3,'aa1',1)
insert cc(id,name,parentid) values(4,'aa2',3)
insert cc(id,name,parentid) values(5,'bb1',2)
insert cc(id,name,parentid) values(6,'bb2',5)

select id,name,parentid from cc
--select name from cc
where parentid=0 or parentid in (select id from cc)
order by parentid

===========
id name parentid
----------- ---------- -----------
1 aa 0
2 bb 0
3 aa1 1
5 bb1 2
4 aa2 3
6 bb2 5

(6 row(s) affected)
snowcloud2002 2004-01-30
  • 打赏
  • 举报
回复
能不能只用sql语句实现呢?
shuiniu 2004-01-30
  • 打赏
  • 举报
回复
参考联机帮助
目录:访问和更改关系数据-》高级查询概念-》Transact-SQL窍门
jmcy12 2004-01-30
  • 打赏
  • 举报
回复
不明白,可不可以把结果再写的详细点。
shuiniu 2004-01-30
  • 打赏
  • 举报
回复
树形数据处理其实不难,就是有时有点绕人,呵呵!
zjcxc 元老 2004-01-30
  • 打赏
  • 举报
回复
--我的函数已经可以啦.

写成函数是为了方便你调用.
shuiniu 2004-01-30
  • 打赏
  • 举报
回复
--测试环境
declare @test table(id int,name char(10),parentid int)
--测试数据
insert @test
select 1 ,'aa' ,0
union all
select 2 ,'bb' ,0
union all
select 3 ,'aa1' ,1
union all
select 4 ,'aa2' ,3
union all
select 5 ,'bb1' ,2
union all
select 6 ,'bb2' ,5

--实现
declare @cs int
set @cs = 0
declare @tree table(id int,cs int,iid int)
Insert @tree Values(0,0,0)
While (@@ROWCOUNT >= 1)
Begin
select @cs = @cs + 1
Insert @tree(id,CS,iid)
Select a.id,@cs,
case when b.cs = 0 then a.id else b.iid end
From @test a,@tree b
Where a.parentid = b.id and b.CS = @cs - 1 and a.id <> a.parentid
End

--结果
select t.name from @tree tr join @test t
on tr.id = t.id and tr.cs > 0
order by tr.iid,tr.cs

/*
name
----------
aa
aa1
aa2
bb
bb1
bb2

(所影响的行数为 6 行)
*/
snowcloud2002 2004-01-30
  • 打赏
  • 举报
回复
name字段的值是随机的
smalldeer 2004-01-30
  • 打赏
  • 举报
回复
zjcxc(祝大家新年快乐.邹建.共享果)的这个函数好,以后用的着
amidel 2004-01-30
  • 打赏
  • 举报
回复
题目出的不太清楚
smalldeer 2004-01-30
  • 打赏
  • 举报
回复
你的name字段是不是有一定规律还是很随机的

如果向aa,aa1,aa2,那楼上的就可以了

如果是没有什么规律的话,等
zjcxc 元老 2004-01-30
  • 打赏
  • 举报
回复
这个其实是树形数据处理的一个应用实例而已:

参考我的贴子:

树形数据的处理
http://expert.csdn.net/Expert/topic/2285/2285830.xml?temp=.7908594
tjkb12 2004-01-30
  • 打赏
  • 举报
回复
select name from test order by name,parentid
加载更多回复(5)

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧