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 CREATE TABLE [tb]([id] INT,[code] NVARCHAR(10),[pid] INT,[name] NVARCHAR(10)) INSERT [tb] SELECT 1,'01',0,N'服装' UNION ALL SELECT 2,'01',1,N'男装' UNION ALL SELECT 3,'01',2,N'西装' UNION ALL SELECT 4,'01',3,N'全毛' UNION ALL SELECT 5,'02',3,N'化纤' UNION ALL SELECT 6,'02',2,N'休闲装' UNION ALL SELECT 7,'02',1,N'女装' UNION ALL SELECT 8,'01',7,N'套装' UNION ALL SELECT 9,'02',7,N'职业装' UNION ALL SELECT 10,'03',7,N'休闲装' UNION ALL SELECT 11,'04',7,N'西装' UNION ALL SELECT 12,'01',11,N'全毛' UNION ALL SELECT 13,'02',11,N'化纤' UNION ALL SELECT 14,'05',7,N'休闲装' GO --SELECT * FROM [tb] -->SQL查询如下: ;WITH T AS ( SELECT CAST(CODE AS VARCHAR(20)) 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 SELECT CAST(B.CODE+A.CODE AS VARCHAR(20)),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 CREATE TABLE [tb]([id] INT,[parentid] INT,[categoryname] NVARCHAR(10)) INSERT [tb] SELECT 1,0,'test1' UNION ALL SELECT 2,0,'test2' UNION ALL SELECT 3,1,'test1.1' UNION ALL SELECT 4,2,'test2.1' UNION ALL SELECT 5,3,'test1.1.1' UNION ALL SELECT 6,1,'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://blog.csdn.net/htl258/archive/2010/04/23/5518166.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, [DT_Name] [nvarchar](100) NULL, [DT_ShortName] [nvarchar](100) NULL, [DT_Number] [nvarchar](100) 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 INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'6937f4c4-0656-4ce7-8049-078b7199c26d', N'行政职务', N'XZZW', N'DT_XZZW', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'dce2ea08-1bd8-4b36-a39c-0e0ee1c253f4', N'劳动合同', N'DT_LDHT', N'DT_LDHT', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'd5a92adc-886f-420b-ae78-0ef161e4aaf6', N'国籍', N'DT_GJ', N'DT_GJ', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'227f7bd8-bf36-48ce-9221-1155b218da6d', N'计算机等级', N'DT_JSJDJ', N'DT_JSJDJ', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'b5ff1e1c-2802-49ad-a9f0-1331ec704207', N'岗位类型', N'GWLX', N'DT_GWLB', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'bf309285-b83e-404a-8baa-167b88028db5', N'专业技术职务', N'ZYJSZW', N'DT_ZYJSZW', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'5c58325f-a70b-4ab1-a0f0-1eb07aa1c14f', N'课程类型', N'课程', N'DT_KCLX', N'课程', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'a5622506-2d39-4c31-99d3-216e4c19fc77', N'健康状况', N'', N'DT_JKZK', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'029c58d8-9ab3-4ef9-807c-275c3fa6dba8', N'身份证件类型', N'ZJLX', N'DT_SFZJLX', N'身份证件类型', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'0f3b1b82-daae-4e5a-a0db-2b565f34138a', N'教师职称', N'DT_JSZC', N'DT_JSZC', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'f5c29858-238c-41fe-9bc4-2ca0acec613d', N'民族', N'民族', N'DT_MZ', N'民族', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'2a800f43-13bb-4795-ab1b-5633f4eac80d', N'学生类型', N'', N'DT_XSLX', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'e770aff5-beb5-4c41-8935-5bf1177ba405', N'专任教师接受培训情况', N'DT_ZRJSJSPXQK', N'DT_ZRJSJSPXQK', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'f16ea79f-8210-4992-b5ae-60761959e9d3', N'签订合同情况', N'DT_QDHTQK', N'DT_QDHTQK', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'105343d1-3997-4f1b-ae32-66f713417707', N'费用类型', N'DT_FYLX', N'DT_FYLX', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'76c6e55e-331c-4e9a-af91-776801e1f0a6', N'户口性质', N'HKXZ', N'DT_HKXZ', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'f674b9ac-0bfd-4fa9-b88d-816364616714', N'荣誉类型', N'RYLX', N'DT_RYLX', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'cac52b7e-1f4f-4d09-9903-8360a7750c65', N'企业工作(实践)时长', N'QYGZ_SJ_SC', N'DT_QYGZ_SJ_SC', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'27927422-1e91-4ff2-aef0-8942fd30aef8', N'普通话等级', N'PTHDJ', N'DT_PTHDJ', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'12965e30-9b7a-4c38-af54-8c4b7303f1e6', N'奖学金', N'', N'DT_JXJ', N'为资助世界各国学生、学者到中国高等学校进行学习和研究,增进中国人民与世界各国人民的相互理解和友谊,发展中国与世界各国在教育、科技、文化、经贸等领域的交流与合作,中国政府设立了中国政府奖学金。教育部负责根据中国政府与外国政府或国际组织达成的协议或计划对外提供中国政府奖学金', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'22965e30-9b7a-4c38-af54-8c4b7303f1e6', N'五险一金', N'金', N'DT_WXYJ', N'你知道什么是五险一金吗?', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'9c21ebf6-5a99-4e45-9b0d-8ce4f23de110', N'助学金', N'DT_ZXJ', N'DT_ZXJ', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'6d660ae9-2c48-4ad2-abee-8e481199b04b', N'取得其他职业资格证书', N'QDQTZYZGZS', N'DT_QDQTZYZGZS', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'0f65f497-f371-48e3-b0b1-9226487a1c35', N'任教学科类别', N'RJXKLB', N'DT_RJXKLB', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'dd3afa0d-5c46-4820-a226-95ab8fa82134', N'生源类型', N'', N'DT_SYLB', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'114c7ea1-aef4-4aba-bc3e-9c8a737b2682', N'请假类型', N'DT_QJLX', N'DT_QJLX', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'ef31b612-f457-41a1-a4bc-9d416ec2a757', N'任课状况', N'RKZK', N'DT_RKZK', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'5e9d84b6-2cf2-4590-910e-9db30ee8126c', N'政治面貌', N'政治面貌', N'DT_ZZMM', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'b9c3ec2d-6708-4020-b93f-9f664575f7eb', N'获奖等级', N'HJDJ', N'DT_HJDJ', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'bcd1fbb8-9209-44d7-af77-9f6ecec246c0', N'学历', N'XL', N'DT_XL', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'b39e45dd-7ac2-4ab2-8241-a3fdebd9f4eb', N'教师资格证', N'JSZGZ', N'DT_JSZGZ', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'4d802690-51ed-45ee-90a0-adee3e7e4bde', N'婚姻状况', N'DT_HYZK', N'DT_HYZK', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'ad4fcf0a-a68c-4059-a1fe-adef2a379fe9', N'职业资格证书等级', N'DT_ZYZGZSDJ', N'DT_ZYZGZSDJ', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'559f7c59-e710-40cd-be9e-b1582ffb059f', N'入学资格', N'DT_RXZG', N'DT_RXZG', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'dfc8072d-a10d-480d-9462-bc20971bb177', N'职称类别', N'DT_ZCLB', N'DT_ZCLB', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'fee41d93-4677-417f-ae20-bf989a579c7b', N'学位', N'XW', N'DT_XW', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'993d74dc-21a2-4517-b317-d9013203b6db', N'论文级别', N'DT_LWJB', N'DT_LWJB', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'503fe824-b190-431e-9a2d-dce0fde3f9cb', N'岗位等级', N'GWDJ', N'DT_GWDJ', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'6211fb24-7db1-4d97-9c08-ee728d2dc1f2', N'团员所在领域', N'DT_TYSZLY', N'DT_TYSZLY', NULL, 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'657f6b25-8c32-40d2-8df9-f08df43e97bc', N'毕业证书', N'DT_BYZS', N'DT_BYZS', N'', 0) INSERT [dbo].[P_DictionaryType] ([DT_ObjectID], [DT_Name], [DT_ShortName], [DT_Number], [DT_Introduction], [DT_IsDelete]) VALUES (N'a60d6b5f-14b7-4ccf-bed6-f12663f21e4a', N'处分级别', N'DT_QFJB', N'DT_QFJB', NULL, 0)