sql问题....急急急!!!!

xiangxiang1107 2010-12-17 07:11:51
例如:table data
id name parent hasChild
001 a 0 1
002 b 0 1
003 c 001 0
004 d 001 0
005 e 002 0
006 f 002 0
007 g 002 0
008 h 002 0

parent 列"0"代表没有父节点 hasChild列“1”代表有子节点 “0”代表没有子节点
创建查询 结果为:也就是让子节点和父节点显示在一起
id name parent hasChild
001 a 0 1
003 c 001 0
004 d 001 0
002 b 0 1
005 e 002 0
006 f 002 0
007 g 002 0
008 h 002 0
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangxiang1107 2010-12-20
  • 打赏
  • 举报
回复
恩 我又验证了下 结果是正确的 误会误会
-晴天 2010-12-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiangxiang1107 的回复:]
#2楼的这位先生 你的语句可以执行 不过结果不是我想要的
id name parent hasChild
---------- ---------- ---------- -----------
001 a 0 1
002 b 0 1
003 c 001 0
004 d 001 0
005 e 002 0
006 f 002 0
007 g 002 0
008 h 002 0
……
[/Quote]
您从语句上看出结果顺序了?
语句中排序的要求是:
第一序为:当 haschild=1 时,以 id 排序,否是以 parent 排序.
第二序为ID.
a,b haschild为1,id 分别为 001 和 002,
其他数据 parent 也为 001 002,这样,第一序为 001和002,a 的子节点的顺序就排到 b前面了.
再以 id 排序,则可得你的要求.
我回复中的结果是在MSSQL中运行所得到的结果,MYSQL同样具有case函数,应该得到相同的结果.
xiangxiang1107 2010-12-18
  • 打赏
  • 举报
回复
#2楼的这位先生 你的语句可以执行 不过结果不是我想要的
id name parent hasChild
---------- ---------- ---------- -----------
001 a 0 1
002 b 0 1
003 c 001 0
004 d 001 0
005 e 002 0
006 f 002 0
007 g 002 0
008 h 002 0
这是你生成的结果 从你的语句上就能看出结果的顺序
xiangxiang1107 2010-12-18
  • 打赏
  • 举报
回复
我用的是Mysql5.0数据库 #1楼的这位先生 你用的是什么数据库呀
-晴天 2010-12-17
  • 打赏
  • 举报
回复
create table data(id nvarchar(10),name nvarchar(10),parent nvarchar(10),hasChild int)
insert into data select '001','a','0',1
insert into data select '002','b','0',1
insert into data select '003','c','001',0
insert into data select '004','d','001',0
insert into data select '005','e','002',0
insert into data select '006','f','002',0
insert into data select '007','g','002',0
insert into data select '008','h','002',0
go
select * from data order by (case when haschild=1 then id else parent end),id
go
drop table data
/*
id name parent hasChild
---------- ---------- ---------- -----------
001 a 0 1
003 c 001 0
004 d 001 0
002 b 0 1
005 e 002 0
006 f 002 0
007 g 002 0
008 h 002 0

(8 行受影响)

*/
DataBox-MDX 2010-12-17
  • 打赏
  • 举报
回复
可以结贴了!
DataBox-MDX 2010-12-17
  • 打赏
  • 举报
回复
记得结贴给分!

use City;
go
if OBJECT_ID(N'A',N'U') is not null drop table A
go
create table A
(
id nvarchar(10) not null,
name nvarchar(20) ,
parent nvarchar(20) ,
hasChild int
)
go

--插入K3_Produce_File_Manage测试数据
insert into A
select '001','a','0', 1 union all
select '002', 'b','0', 1 union all
select '003','c', '001', 0 union all
select '004', 'd', '001', 0 union all
select '005', 'e', '002', 0 union all
select '006', 'f', '002', 0 union all
select '007', 'g', '002', 0 union all
select '008',' h', '002', 0
go
--插入Pro_Power测试数据
with cte as
(
select id, name, parent, hasChild,ROW_NUMBER()over(order by getdate()) as RN from A where parent='0'
union all
select A.id, A.name, A.parent, A.hasChild,cte.RN*10+ROW_NUMBER()over(order by getdate()) as RN from A inner join cte
on A.parent=cte.id
)
select id, name, parent, hasChild from cte order by ltrim(RN)
drop table A
/*
(8 行受影响)
id name parent hasChild
---------- -------------------- -------------------- -----------
001 a 0 1
003 c 001 0
004 d 001 0
002 b 0 1
005 e 002 0
006 f 002 0
007 g 002 0
008 h 002 0

(8 行受影响)
*/

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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