- 浏览: 59082 次
- 性别:
- 来自: 苏州
最新评论
-
se7en8974:
有效。顶一个
老外的lovcombo 使用注意点 -
yekki:
rake rails:freeze:gem与rake rail ...
rake rails:freeze -
tianzhihua:
把你的错误贴上来吧
Struts2 Map 映射 -
myoldman:
我记得java里面integer的最大数值为214748364 ...
Struts2 Map 映射
引用:
--测试数据 深度排序
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
--显示结果
SELECT a.*
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
ID PID Name
------ --------- ----------
001 NULL 山东省
002 001 烟台市
004 002 招远市
003 001 青岛市
005 NULL 四会市
006 005 清远市
007 006 小分市
--*/
--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO
--调用函数查询002及其所有子节点
SELECT a.*
FROM tb a,f_Cid('002') b
WHERE a.ID=b.ID
/*--结果
ID PID Name
------ ------- ----------
002 001 烟台市
004 002 招远市
--*/
--测试数据
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
FROM @t a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
--显示结果
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
|--烟台市
|--招远市
|--青岛市
|--四会市
|--清远市
|--小分市
--*/
/*
标题:查询指定节点及其所有子节点的函数
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-05-12
地点:广东深圳
*/
create table tb(id varchar(3) , pid varchar(3) , name varchar(10))
insert into tb values('001' , null , '广东省')
insert into tb values('002' , '001' , '广州市')
insert into tb values('003' , '001' , '深圳市')
insert into tb values('004' , '002' , '天河区')
insert into tb values('005' , '003' , '罗湖区')
insert into tb values('006' , '003' , '福田区')
insert into tb values('007' , '003' , '宝安区')
insert into tb values('008' , '007' , '西乡镇')
insert into tb values('009' , '007' , '龙华镇')
insert into tb values('010' , '007' , '松岗镇')
go
--查询指定节点及其所有子节点的函数
create function f_cid(@ID varchar(3)) returns @t_level table(id varchar(3) , level int)
as
begin
declare @level int
set @level = 1
insert into @t_level select @id , @level
while @@ROWCOUNT > 0
begin
set @level = @level + 1
insert into @t_level select a.id , @level
from tb a , @t_Level b
where a.pid = b.id and b.level = @level - 1
end
return
end
go
--调用函数查询001(广东省)及其所有子节点
select a.* from tb a , f_cid('001') b where a.id = b.id order by a.id
/*
id pid name
---- ---- ----------
001 NULL 广东省
002 001 广州市
003 001 深圳市
004 002 天河区
005 003 罗湖区
006 003 福田区
007 003 宝安区
008 007 西乡镇
009 007 龙华镇
010 007 松岗镇
(所影响的行数为 10 行)
*/
--调用函数查询002(广州市)及其所有子节点
select a.* from tb a , f_cid('002') b where a.id = b.id order by a.id
/*
id pid name
---- ---- ----------
002 001 广州市
004 002 天河区
(所影响的行数为 2 行)
*/
--调用函数查询003(深圳市)及其所有子节点
select a.* from tb a , f_cid('003') b where a.id = b.id order by a.id
/*
id pid name
---- ---- ----------
003 001 深圳市
005 003 罗湖区
006 003 福田区
007 003 宝安区
008 007 西乡镇
009 007 龙华镇
010 007 松岗镇
(所影响的行数为 7 行)
*/
drop table tb
drop function f_cid
多个的使用临时表组合数据,参考:
SQL code
/*
标题:查询所有顶级节点及其子节点的例
地址:http://topic.csdn.net/u/20090323/21/63a91f51-c4df-464d-ba18-64343deb4e3a.html
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2009-03-23
地点:广东深圳
*/
[code=SQL]create table Area (id int identity,Name varchar(10) ,order_by int ,father_ID int )
insert into area values('广东省',2,0)
insert into area values('四川省',2,0)
insert into area values('湖北省',2,0)
insert into area values('东莞市',1,1)
insert into area values('广州市',1,1)
insert into area values('天河区',0,5)
insert into area values('绵阳市',1,2)
insert into area values('武汉市',1,3)
insert into area values('汉口区',0,8)
insert into area values('随州市',1,3)
go
select * from area
drop table area
/*
id Name order_by father_ID
----------- ---------- ----------- -----------
1 广东省 2 0
2 四川省 2 0
3 湖北省 2 0
4 东莞市 1 1
5 广州市 1 1
6 天河区 0 5
7 绵阳市 1 2
8 武汉市 1 3
9 汉口区 0 8
10 随州市 1 3
(所影响的行数为 10 行)
要求显示为:
name
--------------
广东省
东莞市
广州市
天河区
四川省
绵阳市
湖北省
武汉市
汉口区
随州市
(所影响的行数为 10 行)
*/
SQL code
--创建原始表
create table Area (id int identity,Name varchar(10) ,order_by int ,father_ID int )
insert into area values('广东省',2,0)
insert into area values('四川省',2,0)
insert into area values('湖北省',2,0)
insert into area values('东莞市',1,1)
insert into area values('广州市',1,1)
insert into area values('天河区',0,5)
insert into area values('绵阳市',1,2)
insert into area values('武汉市',1,3)
insert into area values('汉口区',0,8)
insert into area values('随州市',1,3)
--创建临时表
create table tmp (id int identity,Name varchar(10) ,order_by int ,father_ID int )
go
--创建查询指定节点及其所有子节点的函数
create function f_cid(@ID int) returns @t_level table(id int , level int)
as
begin
declare @level int
set @level = 1
insert into @t_level select @id , @level
while @@ROWCOUNT > 0
begin
set @level = @level + 1
insert into @t_level select a.id , @level
from area a , @t_Level b
where a.father_ID = b.id and b.level = @level - 1
end
return
end
go
--创建存储过程并将数据插入临时表
create proc my_proc
as
begin
declare @id as int
set @id = 0
while exists(select 1 from area where order_by = 2 and id > @id)
begin
set @id = (select min(id) from area where order_by = 2 and id > @id)
insert into tmp(Name ,order_by ,father_ID) select a.name,a.order_by ,a.father_id from area a , f_cid(@id) b where a.id = b.id order by a.id
end
end
go
exec my_proc
--从临时表提取数据并显示
select case when order_by = 2 then name
when order_by = 1 then ' ' + name
when order_by = 0 then ' ' + name
end name
from tmp order by id
drop function f_cid
drop proc my_proc
drop table area , tmp
/*
name
--------------
广东省
东莞市
广州市
天河区
四川省
绵阳市
湖北省
武汉市
汉口区
随州市
(所影响的行数为 10 行)
*/
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/04/03/4014748.aspx
发表评论
-
Spring Security 3.x 完整入门教程
2010-09-06 10:20 2571Spring Security 3.x 完整入门教程 本Blo ... -
setup.linux
2010-09-01 17:05 966yum -y install gccyum -y instal ... -
Linux下创建与解压tar, tar.gz和tar.bz2文件及压缩率对比
2010-08-30 15:48 4838Linux下创建与解压tar, tar.gz和tar.bz2文 ... -
linux下编译安装php的参数
2010-08-27 13:57 1524linux下编译安装php的参数 Fast-CGI: ... -
MySQL+PHP5+Apache安装手记
2010-08-27 13:45 920http://database.51cto.com/art/2 ... -
安装PHP
2010-08-27 11:05 2908yum install g++ yum insta ... -
安装mysql
2010-08-27 10:38 846先检查系统是否装上了mysql,如果有将其卸载掉rpm -qa ... -
rpm
2010-08-27 10:22 1103rpm -qpl xxxxxx.rpm 1.如何安装rp ... -
linux下编译安装php的参数汇总
2010-08-27 10:08 1585Fast-CGI:./configure --prefix=/ ... -
iptables用法
2010-08-27 09:32 2117iptables -A INPUT -p tcp --dpor ... -
linux的chmod,chown命令 详解
2010-08-26 16:38 888指令名称 : chmod 使用权限 : 所有使用者 使用方式 ... -
Install and Configure MySQL on Linux
2010-08-26 16:35 1569wget http://mirrors.sohu.com/ ... -
mysql
2010-08-26 14:21 7881、数据库目录 /var/lib/mysql/ 2、 ... -
Java中根据模板导出数据到word的解决方案
2010-02-25 10:06 5859我们需求如下:给你一个模板,里面有一个表格,标题已经给好,程 ... -
基于java的程序OutOfMemory问题的解决及Xms/Xmx/Xss的解释和应用
2010-02-24 16:44 2094长期以来一直都是做java应用的开发,所使用的开发工具基本上也 ... -
neybean支持漂亮的中文
2009-10-13 17:08 0neybean支持漂亮的中文方法如下: -
sychroflow 状态
2009-01-13 18:00 7291. 创建状态 2. 运行状态 3. 挂起 4. 正常 ...
相关推荐
sql 查询 所有子节点 方法已经调试通过(sql-server 2005)
### 用SQL实现树的查询 #### 背景与概念 在计算机科学中,**树形结构**是一种常见的非线性数据结构,用于表示层级关系。这种结构在现实世界中有许多应用,如家谱、组织结构图等。在数据库管理中,尤其是在关系型...
SQL高级查询技术是数据库管理中不可或缺的一部分,它涵盖了多种复杂操作,使得数据处理更为高效和精确。本章主要探讨三个核心主题:日期和时间处理、层次查询以及分析查询,这些都是Oracle Database 10g系统中重要的...
### 部分普通SQL查询在Hive中的实现方式 Hive是一款基于Hadoop的数据仓库工具,能够对存储在Hadoop文件系统中的数据集进行数据提取、转换、加载(ETL),这是一种可以简化MapReduce编程的工具。由于Hive的设计初衷...
在实际应用中,这样的解析系统可以帮助我们更好地理解和优化SQL查询,例如,通过分析语法树来找出性能瓶颈,或者生成SQL语句的可视化表示,便于理解和调试。 总结起来,"C++ SQL生成语法树"是一个涉及词法分析、...
SQL Server查询分析器是Microsoft SQL Server数据库管理系统的重要组成部分,它为数据库管理员和开发人员提供了用于编写、测试和执行SQL查询的界面。免安装版本的SQL Server查询分析器为那些不希望或不能在计算机上...
SqlServer树形结构、层次查询 结果如下: 1 1 2 1-2 4 1-2-4 5 1-2-5 10 1-2-5-10 8 1-2-5-8 6 1-2-6 3 1-3 7 1-3-7 11 1-3-7-11 9 1-3-7-9 12 1-3-7-9-12 13 1-3-7-9-13 14 1-3-7-9-14
mysql 树形结构查询 MySQL 树形结构查询是指使用存储过程来实现 MySQL 数据库中的树形结构查询。这种查询方式可以高效地查询树形结构的数据,并且可以根据需要设置递归深度。 MySQL 中的树形结构查询可以使用存储...
本文将深入探讨C#中的SQL查询技术,如何处理SQL语句的换行问题,以及如何创建和展示SQL数据的树形列表。 首先,"CSharp-SQL.rar"是一个压缩包,其中包含了一系列关于C#与SQL交互的实例代码,这可以帮助开发者更好地...
总结来说,处理SQL中的树形数据需要对递归查询、CTEs以及表自连接等概念有深入理解。通过灵活运用这些技术,我们可以有效地在数据库中构建和查询层级关系,满足各种业务需求。在实际项目中,应根据数据规模和查询...
本文将深入探讨如何使用Delphi编程环境结合SQL(Structured Query Language)来实现动态树的数据查询。 首先,了解Delphi。Delphi是一款强大的Windows应用程序开发工具,它基于Object Pascal编程语言,并且集成了...
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-...第9章 图、树、层次结构和递归查询 附录A 逻辑难题 索引
### SQL树形结构使用WITH详解 在软件开发过程中,树形结构是非常常见的一种数据组织方式。尤其是在处理具有层级关系的数据时,例如组织架构、产品分类等场景,利用SQL实现树形结构可以极大地提高查询效率与数据管理...
### SQL Server 2005中的SQL简单查询详解 #### 实验目的与内容解析 **实验目的** 1. **掌握SQL Server 2005中附加数据库的方法:** 在SQL Server 2005中,附加数据库是一项基本操作,允许用户将现有的数据库文件...
在SQL Server 2008中实现递归查询来获取所有上级或下级数据是一项非常实用的技术,尤其是在处理具有层次结构的数据时。本篇将详细解释如何利用Common Table Expressions (CTE)来完成这样的查询,并对提供的示例代码...
为有效防范这类攻击,学术界和工业界提出了多种防御策略,其中基于SQL语法树的SQL注入过滤方法因其理论和技术深度,受到了众多安全专家的关注。本文将深入探讨这一方法的原理、实现和效果评估,并展望其未来可能的...
在SQL中,递归查询是一种强大的工具,常用于处理层级数据,例如组织结构、树形菜单等。在给定的场景中,我们需要根据一个特定的节点ID查询出该节点及其所有子节点,并将这些结果存储在一个临时表中。以下是实现这一...
一个属性数据库表,利用sql语句对其查询得到树形的数据库表的记录利用的是数据库的递归查询