SQL Server 2005 中的树形数据处理示例
--创建测试数据
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[tb]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[tb]
GO
--示例数据
createtable[tb]([id]intPRIMARYKEY,[pid]int,namenvarchar(20))
INSERT[tb]SELECT1,0,N'中国'
UNIONALLSELECT2,0,N'美国'
UNIONALLSELECT3,0,N'加拿大'
UNIONALLSELECT4,1,N'北京'
UNIONALLSELECT5,1,N'上海'
UNIONALLSELECT6,1,N'江苏'
UNIONALLSELECT7,6,N'苏州'
UNIONALLSELECT8,7,N'常熟'
UNIONALLSELECT9,6,N'南京'
UNIONALLSELECT10,6,N'无锡'
UNIONALLSELECT11,2,N'纽约'
UNIONALLSELECT12,2,N'旧金山'
GO
--查询指定id的所有子
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[f_cid]')andxtypein(N'FN',N'IF',N'TF'))
dropfunction[dbo].[f_cid]
GO
--=====================================================
--查询指定id的所有子
--邹建2005-07(引用请保留此信息)
--调用示例
/*--调用(查询所有的子)
SELECTA.*,层次=B.[level]
FROM[tb]A,f_cid(2)B
WHEREA.[id]=B.[id]
--*/
--=====================================================
CREATEFUNCTIONf_cid(@idint)
RETURNSTABLE
AS
RETURN(
WITHctb([id],[level])
AS(
SELECT[id],1FROM[tb]
WHERE[pid]=@id
UNIONALL
SELECTA.[id],B.[level]+1
FROM[tb]A,ctbB
WHEREA.[pid]=B.[id])
SELECT*FROMctb
--如果只显示最明细的子(下面没有子),则将上面这句改为下面的
--SELECT*FROMctbA
--WHERENOTEXISTS(
--SELECT1FROM[tb]WHERE[pid]=A.[id])
)
GO
--调用(查询所有的子)
SELECTA.*,层次=B.[level]
FROM[tb]A,f_cid(2)B
WHEREA.[id]=B.[id]
GO
--查询指定id的所有父
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[f_pid]')andxtypein(N'FN',N'IF',N'TF'))
dropfunction[dbo].[f_pid]
GO
--=====================================================
--查询指定id的所有父
--邹建2005-07(引用请保留此信息)
--调用示例
/*--调用(查询所有的父)
SELECTA.*,层次=B.[level]
FROM[tb]A,[f_pid](2)B
WHEREA.[id]=B.[id]
--*/
--=====================================================
CREATEFUNCTION[f_pid](@idint)
RETURNSTABLE
AS
RETURN(
WITHptb([id],[level])
AS(
SELECT[pid],1FROM[tb]
WHERE[id]=@id
AND[pid]<>0
UNIONALL
SELECTA.[pid],B.[level]+1
FROM[tb]A,ptbB
WHEREA.[id]=B.[id]
AND[pid]<>0)
SELECT*FROMptb
)
GO
--调用(查询所有的父)
SELECTA.*,层次=B.[level]
FROM[tb]A,[f_pid](7)B
WHEREA.[id]=B.[id]
GO
--树形分级显示
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[f_id]')andxtypein(N'FN',N'IF',N'TF'))
dropfunction[dbo].[f_id]
GO
--=====================================================
--级别及排序字段(树形分级显示)
--邹建2005-07(引用请保留此信息)
--调用示例
/*--调用实现树形显示
--调用函数实现分级显示
SELECTN'|'+REPLICATE('-',B.[level]*4)+A.name
FROM[tb]A,f_id()B
WHEREa.[id]=b.[id]
ORDERBYb.sid
--当然,这个也可以根本不用写函数,直接排序即可
WITHstb([id],[level],[sid])
AS(
SELECT[id],1,CAST(RIGHT(10000+[id],4)asvarchar(8000))
FROM[tb]
WHERE[pid]=0
UNIONALL
SELECTA.[id],B.[level]+1,B.sid+RIGHT(10000+A.[id],4)
FROM[tb]A,stbB
WHEREA.[pid]=B.[id])
SELECTN'|'+REPLICATE('-',B.[level]*4)+A.name
FROM[tb]A,stbB
WHEREa.[id]=b.[id]
ORDERBYb.sid
--*/
--=====================================================
CREATEFUNCTIONf_id()
RETURNSTABLE
AS
RETURN(
WITHstb([id],[level],[sid])
AS(
SELECT[id],1,CAST(RIGHT(10000+[id],4)asvarchar(8000))
FROM[tb]
WHERE[pid]=0
UNIONALL
SELECTA.[id],B.[level]+1,B.sid+RIGHT(10000+A.[id],4)
FROM[tb]A,stbB
WHEREA.[pid]=B.[id])
SELECT*FROMstb
)
GO
--调用函数实现分级显示
SELECTN'|'+REPLICATE('-',B.[level]*4)+A.name
FROM[tb]A,f_id()B
WHEREa.[id]=b.[id]
ORDERBYb.sid
GO
分享到:
相关推荐
│ 3.4.3 IP地址处理函数.sql │ │ 3.5.1 字符串比较函数.sql │ │ 3.5.2 字符串并集&交集处理示例.sql │ │ 3.5.3 字符串分拆并统计的处理示例.sql │ │ 3.5.5 字符串处理示例--列车车次查询....
│ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │...
利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...
利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...
利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...
利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...
93. cliconfg-------SQL SERVER 客户端网络实用程序 94. Clipbrd--------剪贴板查看器 95. conf-----------启动netmeeting 96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC...
案例1.12 以树形显示的窗体 案例1.13 图案动画窗体 本章小结 第2章 图形图像处理技术 案例2.1 波形图特效 案例2.2 在图像中写入文字 案例2.3 图像缩放与翻转 .案例2.4 图像的涂沫 案例2.5 百叶窗图像效果 ...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
10_TreeCtrlDemo 演示树形控件的使用方法。 11_RichEditDemo 演示格式文本框的使用方法。 12_TabCtrlDemo 演示属性页的使用方法。 13_AnimateDemo 演示动画控件的使用方法。 14_DateTimeDemo 演示日期...
主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 1:综合FTP下载和HTTP(网络蚂蚁)(多线程). 2:FTP下载支持多个站点同时下载一个文件(同时支持断点续传). 3...
EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...
EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...
1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件,FTP的目标是:(1)提高...