http://blog.csdn.net/dxnn520/article/details/8089149
--------------------------------------------------------------------------

--  Author : htl258(Tony)

--  Date   : 2010-04-23 02:37:28

--  Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) 

--          Jul  9 2008 14:43:34 

--          Copyright (c) 1988-2008 Microsoft Corporation

--          Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)

--  Subject: BOM按节点排序应用实例

--------------------------------------------------------------------------

--实例1:

--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL

    DROP TABLE [tb]

GO

),))

INSERT [tb]

,,N'服装' UNION ALL

,,N'男装' UNION ALL

,,N'西装' UNION ALL

,,N'全毛' UNION ALL

,,N'化纤' UNION ALL

,,N'休闲装' UNION ALL

,,N'女装' UNION ALL

,,N'套装' UNION ALL

,,N'职业装' UNION ALL

,,N'休闲装' UNION ALL

,,N'西装' UNION ALL

,,N'全毛' UNION ALL

,,N'化纤' UNION ALL

,,N'休闲装'

GO

--SELECT * FROM [tb]

-->SQL查询如下:

;WITH T AS

(

    )) AS CODE,*,

        CAST(ID AS VARBINARY(MAX)) AS px 

    FROM tb AS A

    WHERE NOT EXISTS(SELECT * FROM tb WHERE id=A.pid)

    UNION ALL 

    )),A.*,

         CAST(B.px+CAST(A.ID AS VARBINARY) AS VARBINARY(MAX))    

    FROM tb AS A

        JOIN T AS B

           ON A.pid=B.id

)

SELECT Code,Name FROM T 

ORDER BY px

/*

Code                 Name

-------------------- ----------

01                   服装

0101                 男装

010101               西装

01010101             全毛

01010102             化纤

010102               休闲装

0102                 女装

010201               套装

010202               职业装

010203               休闲装

010204               西装

01020401             全毛

01020402             化纤

010205               休闲装

(14 行受影响)

*/

--实例2:

--> 生成测试数据表:tb

IF NOT OBJECT_ID('[tb]') IS NULL
    DROP TABLE [tb]
GO
))
INSERT [tb]
,,'test1' UNION ALL
,,'test2' UNION ALL
,,'test1.1' UNION ALL
,,'test2.1' UNION ALL
,,'test1.1.1' UNION ALL
,,'test1.2'
GO
--SELECT * FROM [tb]

-->SQL查询如下:
;WITH T AS
(
    SELECT *,CAST(ID AS VARBINARY(MAX)) AS px
    FROM tb AS A
    WHERE NOT EXISTS(SELECT * FROM tb WHERE id=A.[parentid])
    UNION ALL
    SELECT A.*,CAST(B.px+CAST(A.ID AS VARBINARY) AS VARBINARY(MAX))
    FROM tb AS A
        JOIN T AS B
           ON A.[parentid]=B.id
)
SELECT [id],[parentid],[categoryname] FROM T
ORDER BY px
/*
id          parentid    categoryname
----------- ----------- ------------
1           0           test1
3           1           test1.1
5           3           test1.1.1
6           1           test1.2
2           0           test2
4           2           test2.1

(6 行受影响)
*/

本文来自CSDN博客,转载请标明出处:http:.aspx

复杂例:

USE [YZL]
GO
/****** Object:  Table [dbo].[P_DictionaryType]    Script Date: 10/13/2015 14:59:57 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[P_DictionaryType](
    [DT_ObjectID] [uniqueidentifier] NOT NULL,
    ) NULL,
    ) NULL,
    ) NULL,
    [DT_Introduction] [text] NULL,
    [DT_IsDelete] [bit] NULL,
 CONSTRAINT [PK_P_DICTIONARYTYPE] PRIMARY KEY CLUSTERED
(
    [DT_ObjectID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)
)

生成数据表脚本(字典类型表)

USE [YZL]
GO
/****** Object:  Table [dbo].[P_Dictionary]    Script Date: 10/13/2015 14:55:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[P_Dictionary](
    [D_ObjectID] [uniqueidentifier] NOT NULL,
    [D_ParentID] [uniqueidentifier] NULL,
    ) NULL,
    [D_TypeID] [uniqueidentifier] NULL,
    [D_Sort] [int] NULL,
    [D_IsDelete] [bit] NULL,
 CONSTRAINT [PK_P_DICTIONARY] PRIMARY KEY CLUSTERED
(
    [D_ObjectID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'0:已删除,1:未删除' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'P_Dictionary', @level2type=N'COLUMN',@level2name=N'D_IsDelete'
GO
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )
, )

生成数据表脚本(字典表)

实现sql:

;WITH T AS
(
    )) )) AS px
    FROM dbo.P_Dictionary AS A
    WHERE NOT EXISTS(SELECT * FROM dbo.P_Dictionary WHERE D_ObjectID=A.D_ParentID)
    UNION ALL
    )) ))
    FROM dbo.P_Dictionary AS A
        JOIN T AS B
           ON A.D_ParentID=B.D_ObjectID
)
SELECT * FROM T
ORDER BY D_TypeID, px

Sql Server按树形结构排序查询表记录的更多相关文章

  1. 人人都是 DBA(VIII)SQL Server 页存储结构

    当在 SQL Server 数据库中创建一张表时,会在多张系统基础表中插入所创建表的信息,用于管理该表.通过目录视图 sys.tables, sys.columns, sys.indexes 可以查看 ...

  2. [转帖]真TM长的:SQL Server 2008存储结构——GAM和SGAM、PFS结构、IAM结构、DCM&amp;BCM

    谈到GAM和SGAM,我们不得不从数据库的页和区说起. https://blog.csdn.net/snowfoxmonitor/article/details/49991015 一个数据库由用户定义 ...

  3. SQL SERVER大话存储结构(5)_SQL SERVER 事务日志解析

          本系列上一篇博文链接:SQL SERVER大话存储结构(4)_复合索引与包含索引    1 基本介绍 每个数据库都具有事务日志,用于记录所有事物以及每个事物对数据库所作的操作. 日志的记录 ...

  4. SQL SERVER大话存储结构(4)_复合索引与包含索引

              索引这块从存储结构来分,有2大类,聚集索引和非聚集索引,而非聚集索引在堆表或者在聚集索引表都会对其 键值有所影响,这块可以详细查看本系列第二篇文章:SQL SERVER大话存储结构 ...

  5. SQL SERVER大话存储结构(6)_数据库数据文件

            数据库文件有两大类:数据文件跟日志文件,每一个数据库至少各有一个数据文件或者日志文件,数据文件用来存储数据,日志文件用来存储数据库的事务修改情况,可用于恢复数据库使用.     这里分 ...

  6. 查询Sql Server数据库对象结构

    查询Sql Server数据库对象结构 查询数据库 查询架构 查询表 查询列 查询存储过程 查询视图 1.查询某一服务器下所有数据库 select t.[name] as 数据库 from sys.d ...

  7. MySQL的redo log结构和SQL Server的log结构对比

    MySQL的redo log结构和SQL Server的log结构对比 innodb 存储引擎 mysql技术内幕 log buffer根据一定规则将内存中的log block刷写到磁盘,这个规则是 ...

  8. SQL Server 的索引结构实例

    目前SQL Server 的索引结构如下: 这个是聚集索引的存放形式: 非聚集索引的方式如下: 它们是以B+树的数据结构存放的. 相信大家都看过类似的图,但是没有直观的认识,下面举一个实际的例子来说明 ...

  9. 公司内部培训SQL Server传统索引结构PPT分享

    公司内部培训SQL Server传统索引结构PPT分享 下载地址 http://files.cnblogs.com/files/lyhabc/SQLServer%E4%BC%A0%E7%BB%9F%E ...

随机推荐

  1. Python-7 列表list

    #1 创建列表.向列表中添加元素 1) 列表名称.append(*) 2) 列表名称.extend([*,*,...]) 3) 列表名称.insert(位置,*) member = ['小甲鱼','小 ...

  2. 如何启动另一个应用的activity

    1.使用action Intent i=new Intent(); i.setAction(".........."); startActivity(i); 前提条件:要启动的ac ...

  3. 来访统计的JS代码

    <script language="JavaScript"> var caution = false function setCookie(name, value, e ...

  4. 第三百三十八天 how can I 坚持

    下午去奥体森林公园跑了个步,好累. 晚上和徐斌同学一起吃了个饭,接触了下杨辉三角,还没整明白,明天看下. 突然想起java 编译,ant脚本. 要精通门技术,还要赶上潮流. 睡觉.

  5. c#简体繁体转换

     方法一已经亲测,使用正常,方法二貌似不能用. 方法一 /// <summary> /// 中文字符工具类 /// </summary> public static class ...

  6. JavaScript DES 加密

    最近做网页数据加密工作, 使用CryptoJS v3.1.2 这个JavaScript脚本,网上比较有质量的文章实在太少,经验证加密结果与Asp.net DES加密结果一致 参考文章 https:// ...

  7. mysql中的JOIN用法总结

    join是mysql中一个基础的关键词,一般在多表连接查询中使用,这里做一下总结 1.JOIN的语法格式 table_references: table_reference [, table_refe ...

  8. jQuery Datetable

    先来个官网可以直接看官网  https://www.datatables.net/manual/data/ 安装 DataTables是一个功能强大的Javascript库,用于为HTML表格添加交互 ...

  9. Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题

    Wolsey“强整数规划模型”经典案例之一单源固定费用网络流问题 阅读本文可以理解什么是“强”整数规划模型. 单源固定费用网络流问题见文献[1]第13.4.1节(p229-231),是"强整 ...

  10. js中的instanceof运算符

    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//true 实例obj ...