`
javayestome
  • 浏览: 1010428 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL Server 2005 中的树形数据处理示例-2

阅读更多

--=====================================================
--直接查询的应用实例
--=====================================================

--1.每个叶子结点的FullName

WITHstb([id],[FullName],[pid],[flag])
AS(
SELECT[id],CAST(RTRIM([name])asnvarchar(4000)),[pid],1
FROM[tb]A
WHERENOTEXISTS(
SELECT1FROM[tb]
WHERE[pid]=A.[id])
UNIONALL
SELECTA.[id],RTRIM(B.[name])+'/'+A.[FullName],B.[pid],A.flag+1
FROMstbA,[tb]B
WHEREA.[pid]=B.[id])
SELECT[id],[FullName]FROMstbA
WHERENOTEXISTS(
SELECT*FROMstb
WHERE[id]=A.[id]
ANDflag>A.flag)
ORDERBY[id]
GO

--2.每个结点的FullName

WITHstb([id],[FullName],[pid],[flag])
AS(
SELECT[id],CAST(RTRIM([name])asnvarchar(4000)),[pid],1
FROM[tb]
UNIONALL
SELECTA.[id],RTRIM(B.[name])+'/'+A.[FullName],B.[pid],A.flag+1
FROMstbA,[tb]B
WHEREA.[pid]=B.[id])
SELECT[id],[FullName]FROMstbA
WHERENOTEXISTS(
SELECT*FROMstb
WHERE[id]=A.[id]
ANDflag>A.flag)
ORDERBY[id]
GO

--3.树形显示数据

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
GO

--4.检查不规范的数据

WITHchktb([id],[pid],[level],[Path],[Flag])
AS(
SELECT[id],[pid],1,
CAST([id]asvarchar(8000)),
CASEWHEN[id]=[pid]THEN1ELSE0END
FROM[tb]
UNIONALL
SELECTA.[id],B.[pid],B.[level]+1,
CAST(B.[Path]+'>'+RTRIM(A.[id])asvarchar(8000)),
CASEWHENA.[id]=B.[pid]THEN1ELSE0END
FROM[tb]A,chktbB
WHEREA.[pid]=B.[id]
ANDB.[Flag]=0)
SELECT*FROMchktb
WHERE[Flag]=1
ORDERBY[Path]
GO

--5.查询结点的所有子结点数

WITHsumtb([id],[level])
AS(
SELECT[pid],1
FROM[tb]A
WHERE[pid]<>0
UNIONALL
SELECTA.[pid],B.[level]+1
FROM[tb]A,sumtbB
WHEREA.[id]=B.[id]
ANDA.[pid]<>0)
SELECTA.[id],ChildCounts=COUNT(b.[id])
FROM[tb]A
LEFTJOINsumtbB
ONA.[id]=B.[id]
GROUPBYA.[id]
GO

--6.查询结点的所有父结点数

WITHsumtb([id],[level],[ParentCounts])
AS(
SELECT[id],1,0
FROM[tb]A
WHERE[pid]=0
UNIONALL
SELECTA.[id],B.[level]+1,B.[ParentCounts]+1
FROM[tb]A,sumtbB
WHEREA.[pid]=B.[id])
SELECT*FROMsumtb
orderby[ID]
GO

分享到:
评论

相关推荐

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    经典SQL脚本大全

    │ │ 3.5.5 字符串处理示例--列车车次查询.sql │ │ 3.6.2 字符串在编号查询中的应用示例及常见问题.sql │ │ 3.6.3 动态参数的存储过程示例.sql │ │ 3.6.4 动态他Transact-SQL语句处理中的常见问题演示.sql │...

    SQL Server 2008 商业智能完美解决方案(3)

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server 2008商业智能完美解决方案 1/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server 2008商业智能完美解决方案 2/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    SQL Server 2008商业智能完美解决方案 3/3

    利用Microsoft SQL Server 2008实现灵活的商业智能解决方案使用Microsoft 完善的BI工具构建B0解决方案的必备指南,使用SQLServer 2008设计、开发和部署更有效的数据集成、报表、分析解决方案所需的权威操作指南。...

    cmd操作命令和linux命令大全收集

    93. cliconfg-------SQL SERVER 客户端网络实用程序 94. Clipbrd--------剪贴板查看器 95. conf-----------启动netmeeting 96. certmgr.msc----证书管理实用程序 操作详解 net use ipipc$ " " /user:" " 建立IPC...

    Visual C#.NET 2008程序设计案例集锦 (源码)

    案例1.12 以树形显示的窗体 案例1.13 图案动画窗体 本章小结 第2章 图形图像处理技术 案例2.1 波形图特效 案例2.2 在图像中写入文字 案例2.3 图像缩放与翻转 .案例2.4 图像的涂沫 案例2.5 百叶窗图像效果 ...

    java源码包---java 源码 大量 实例

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    vc实例精通源码,windows基本控件的使用Demo

    10_TreeCtrlDemo 演示树形控件的使用方法。 11_RichEditDemo 演示格式文本框的使用方法。 12_TabCtrlDemo 演示属性页的使用方法。 13_AnimateDemo 演示动画控件的使用方法。 14_DateTimeDemo 演示日期...

    vc++ 开发实例源码包

    主要在MzfHipsDlg中,程序分析进程数据、驱动数据、注册表数据从而实现主动防御。 超级下载 不过不是c++源码 1:综合FTP下载和HTTP(网络蚂蚁)(多线程). 2:FTP下载支持多个站点同时下载一个文件(同时支持断点续传). 3...

    java源码包2

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    EJB中JNDI的使用源码例子 1个目标文件,JNDI的使用例子,有源代码,可以下载参考,JNDI的使用,初始化Context,它是连接JNDI树的起始点,查找你要的对象,打印找到的对象,关闭Context…… ftp文件传输 2个目标文件...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包3

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包4

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

Global site tag (gtag.js) - Google Analytics