select index_id, parent_id, index_name from t_pub_index
start with index_id=0 connect by prior index_id=parent_id
其中start with 和connect by 是Oracle的SQL语句的保留字,使一条记录的parent_id列的值等于前一记录的index_id列的值,并以parent_id等于0的记录开始
如何把这条语句转成sql server 的格式,因为它是用Oracle实现的
---------------------------------------------------------------
这在Oracle中是树展开的语句。
在SQL Server中无法通过一条语句来完成。
必须要写一个store procedure或者function
---------------------------------------------------------------
参考:
http://expert.csdn.net/Expert/topic/1149/1149874.xml
---------------------------------------------------------------
我认为,sky_blue(老衲) 兄的办法还是太庞大了一点,而且用到了
临时表,,好象,,,这个有点不太环保。。。。
如 IronPromises(铁诺) 兄所说,这个问题其实用一个存储过程或者
自定义函数来解决都可以。以下给出一种用自定义函数解决的思路:
现在的表结构为:
(节点id,父亲id,节点名称)
1,-1, 书类
2,1,计算机
3,2,数据结构
4,1,生物学
5,4,生物学基础
似乎很难得到所想要的结果,但是如果表结构如下所示呢?
(节点id,父亲id,节点名称,节点编号)
1,-1, 书类 ,0001
2,1,计算机 ,00010002
3,2,数据结构,000100020003
4,1,生物学,00010004
5,4,生物学基础,000100040005
那么一句 Select * from table order by 节点编号 就完了,
大家都会。
因此,我们可以写一个函数,例如叫做GetTreeID,里面的算法
就是把某个节点的所有父节点、祖父节点。。。。统统给它加到
前面,再加以格式化。当然,这个函数的实现原理与sky_blue(老衲)
兄的存储过程是类似的。可惜,我手边没有SQL SERVER,哥们你自己动手
写写吧。完了之后应该是这个效果:
Select * from t_pub_index order by GetTreeID(index_id)
就解决问题。