急求一条MS SQL,麻烦大家帮帮

zhlym 2007-11-02 03:50:25
资料如下
ID NAME IDX
0 根
1 辅料 0
2 成品 0
4B 其它 0
5 半成品 0
01 07小件 2
02 07大件 2
03 工作服 2
101 面料类 1

用一条SQL语句(是要一条SQL语句)要求结果如下
0 根
1 辅料 0
101 面料类 1
2 成品 0
01 07小件 2
02 07大件 2
03 工作服 2
4B 其它 0
5 半成品 0

麻烦大家出手
...全文
174 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ojuju10 2007-11-03
  • 打赏
  • 举报
回复
select id,name,idx
from
(
select Id,name,idx,Px=0
from tab where idx is null
union
select Id,name,idx,Px=1
from tab where idx='0'
union
select Id,name,idx,Px=2
from tab where idx is not null and idx<>'0'
)
order by px,id
zhlym 2007-11-03
  • 打赏
  • 举报
回复
不至于这么难吧,带星的朋友出手下啦
boblaw 2007-11-03
  • 打赏
  • 举报
回复
不过,这个查询语句,只适用于三层
boblaw 2007-11-03
  • 打赏
  • 举报
回复

--创建测试表
DECLARE @t TABLE(ID VARCHAR(10),Name VARCHAR(20),IDX VARCHAR(10))
INSERT INTO @t VALUES('0','根',NULL)
INSERT INTO @t VALUES('1','辅料','0')
INSERT INTO @t VALUES('2','成品','0')
INSERT INTO @t VALUES('4B','其它','0')
INSERT INTO @t VALUES('5','半成品','0')
INSERT INTO @t VALUES('01','07小件','2')
INSERT INTO @t VALUES('02','07大件','2')
INSERT INTO @t VALUES('03','工作服','2')
INSERT INTO @t VALUES('101','面料类','1')

--查询
SELECT a.*
FROM @t a
LEFT JOIN
(
SELECT ID,IDX+'_'+ID AS Ord FROM @t WHERE IDX='0'
UNION
SELECT ID,'0_'+IDX+'_'+ID AS Ord FROM @t WHERE IDX<>'0'
)b
ON a.ID=b.ID
ORDER BY b.Ord

--查询结果
-------------------
0 根 NULL
1 辅料 0
101 面料类 1
2 成品 0
01 07小件 2
02 07大件 2
03 工作服 2
4B 其它 0
5 半成品 0

boblaw 2007-11-03
  • 打赏
  • 举报
回复
确定只有两层吗?那就简单了
fcuandy 2007-11-03
  • 打赏
  • 举报
回复
胡说,明明是三层,要说是两层.

不过两层跟三层都不要紧了,无非是语句复不复杂的问题. 因为层数都确定了.
但是,这种结构应该是多层的. 如果是定三层,自己改表结构,会有意想不到的收获.
zhlym 2007-11-03
  • 打赏
  • 举报
回复
不至吧,就两层排列呀
boblaw 2007-11-03
  • 打赏
  • 举报
回复
to:LZ
这个问题,要想在SQL Server中实现并不是不可以,但是写出来的查询效率不高,应该在客户端来实现排序,会简单很多,而且也分担了服务器的压力.
zhlym 2007-11-03
  • 打赏
  • 举报
回复
TO ojuju10
这样好像不行吧?
kelph 2007-11-02
  • 打赏
  • 举报
回复
如果是2000,我想不出
2005一句还可以
zhlym 2007-11-02
  • 打赏
  • 举报
回复
两天的问题没解决,大家出下手
zhlym 2007-11-02
  • 打赏
  • 举报
回复
有规律的,IDX为空和ID等于0为父根,IDX为0的记录为主根,而ID=IDX的为次根
kelph 2007-11-02
  • 打赏
  • 举报
回复
IDX 不就是父节点么?
free_pop2k 2007-11-02
  • 打赏
  • 举报
回复
什么规律都没有,没办法做到
dawugui 2007-11-02
  • 打赏
  • 举报
回复
我说看了半天不好搞,原来如此.
fa_ge 2007-11-02
  • 打赏
  • 举报
回复
这样排序没有规律
boblaw 2007-11-02
  • 打赏
  • 举报
回复
to LZ
似乎前兩天也見到這個貼子,你的表設計有問題,應該加一個字段ParentID,表示其父級ID,否則沒有關聯,.

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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