- 浏览: 65137 次
- 性别:
- 来自: 珠海
文章分类
最新评论
db2中关于递归(with)的使用
因为有人问及,这边简单的再探讨一下
-------------------
1.创建测试表
create table zxt_test
( id varchar(10),
ivalue varchar(20),
iname varchar(20)
)
commit;
-----------
2.插入测试语句
insert into zxt_test values('1','aa','x'),('2','bb','x'),('3','bb','x'),('1','bb','y'),('2','bb','y'),('3','bb','y');
commit;
---------------
3.查看数据
select * from zxt_test;
1 'aa' 'x'
2 'bb' 'x'
3 'bb' 'x'
1 'bb' 'y'
2 'bb' 'y'
3 'bb' 'y'
----------------
4.with 的写法!
with
s as (
select row_number()over(partition by iname order by id) id1,
row_number()over(partition by iname order by id) id2, ivalue,iname from zxt_test
)
,
t(iname,id1,id2,ivalue) as
(
select iname,id1,id2,cast(ivalue as varchar(100)) from s where id1 =1 and id2=1
union all
select t.iname,t.id1+1,t.id2,cast(s.ivalue||','||t.ivalue as varchar(100))
from s, t
where s.id2=t.id1+1 and t.iname = s.iname
)
select iname,ivalue from t where t.id1= (select max(id1) from s where s.iname = t.iname);
5.结果如下:
'x' 'bb,bb,aa'
'y' 'bb,bb,bb'
另外一种写法:
with
s as (
select row_number() over(partition by iname order by id) id1, ivalue,iname from zxt_test
)
,
t(iname,id1,ivalue) as
(
select iname,id1,cast(ivalue as varchar(100)) from s where id1 =1
union all
select t.iname,s.ID1,cast(s.ivalue||','||t.ivalue as varchar(100))
from s, t
where s.id1=t.id1+1 and t.iname = s.iname
)
select iname,ivalue from t where t.id1= (select max(id1) from s where s.iname = t.iname);
有更详细的请查看我的blog!
http://myfriend2010.itpub.net/post/29012/367738
发表评论
-
数据库创建链接远程服务器
2014-05-09 11:59 723--PKselect * from sys.key_con ... -
SQL作业的操作大全
2013-03-21 16:00 903SQL作业的操作全 --定义创建作业DECLARE @ ... -
Oracle创建删除用户、角色、表空间、导入导出..命令总结
2012-12-11 14:18 927//创建临时表空间 create temporary ta ... -
sql 查询出每个科目成绩第一的学生信息
2012-07-10 09:10 5562一次性查询出每个科目的成绩第一的学生,在SQL SERVE ... -
用SQL语句添加删除修改字段等操作
2012-05-28 14:10 2158用SQL语句添加删除修改字段1.增加字段 alter ... -
SQL中 patindex函数的用法
2012-03-13 11:12 1136语法格式:PATINDEX ( '%pattern%' , e ... -
查询DB2多行数据一行显示(精简sql)
2012-02-21 09:45 1801select o1.ORGTYPE,varchar(repla ... -
SQL+Assistant+v4.8&2Bkey
2011-10-25 09:09 820SQL+Assistant+v4.8&2Bkey -
ROW_NUMBER、RANK、DENSE_RANK的用法
2011-10-19 08:39 861ROW_NUMBER、RANK、DENSE_RANK的用法 ... -
用 SQL 语句查看 SQL Server 端口号
2011-09-01 11:00 4431用 SQL 语句查看 SQL Server 2005 端口号 ... -
DB2常用函数与Oracle比较
2011-05-19 09:47 18431、类型转化函数:decimal, double, Inte ... -
oracle 的wmsys.wm_concat函数用法
2011-05-17 14:25 1553无意中碰到wmsys.wm_concat这个函数很好很强大. ... -
Oracle相关的1000个命令
2011-02-23 09:22 1707Oracle相关的1000个命令(实用) 比较适合初学者,所 ... -
Sql Server 常用日期格式
2011-02-19 10:31 824Sql Server 常用日期格式 SQL Server中文 ... -
SQL语句优化34条(常拿来用用)
2011-02-18 08:32 7291)选择最有效率的表名顺序(只在基于规则的优化器中有效): ... -
MS-SQL Server 多行转为一列的合并
2010-12-21 08:40 4241描述:将如下形式的数据按id字段合并value字段。 id ... -
列出一个表的字段的全部信息
2010-12-17 11:00 875select rtrim(b.name) ascolname ... -
汇总数据到一行
2010-11-15 21:17 827--sql server 2005 --执行 select ... -
SQL的行列转化问题
2010-10-21 16:04 1045SQL Server中行列转换 Pivot UnPivot ... -
Oracle 任意两个时间之间的日期 时间列表
2010-10-12 16:18 997如何查找2个时间之间的日期列表? 如查找 2004-01-0 ...
相关推荐
在DB2中,循环递归查询主要通过使用Common Table Expressions(CTEs,公共表表达式)来实现。CTE是一种临时的结果集,它可以在同一个查询语句中被多次引用。对于循环递归查询而言,CTE允许用户定义一个递归结构,...
同时,为了防止无限递归,通常会设置一个最大递归深度,比如Oracle的`CONNECT_BY_ISCYCLE`和DB2的`WITH RECURSIVE`中的循环检测。 在实际应用中,了解并熟练掌握这些递归查询技巧对于处理树形结构的数据至关重要。...
以下是对DB2递归SQL的详细解释: 1. **递归查询的基本结构** - **初始查询**:这是CTE中对基础表进行查询的部分,不引用CTE本身,用于获取递归的起点。 - **递归查询**:在FROM子句中引用CTE,形成递归。递归查询...
本文旨在指导读者如何将 Oracle 数据库中的 `CONNECT BY` 语法及其相关的伪列转换为适用于 IBM DB2 Universal Database (DB2 UDB) for Linux、UNIX 和 Windows 的递归公共表表达式 (Recursive Common Table ...
【DB2公共表表达式(WITH语句使用)】 公共表表达式(Common Table Expression,简称CTE)在DB2数据库系统中是一个非常强大的工具,主要用于定义临时的、只在查询过程中存在的表。WITH语句使得复杂的查询变得更加...
与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...
同样地,在DB2中使用`TO_DATE`函数转换字符串为日期时间,而在MySQL中则使用`STR_TO_DATE`函数。 ```sql -- DB2 SELECT F_GET_STR_TO_DATE(startDate DATETIME, split_format VARCHAR(25), dateType VARCHAR(3)) --...
- **递归查询验证**:使用`CONNECT BY`语法(在DB2中使用其他方法)验证递归查询。 - **左连接验证**:通过创建两个表并进行左连接操作来验证。 - **DUAL表验证**:在DB2中创建一个名为`DUAL`的空表并查询。 - *...
**注意:** 在DB2中,UDF和触发器中也可以使用游标,但语法略有不同。 ##### 3.3 转换游标的属性 游标的属性可以帮助开发者获取游标的状态信息。 **Oracle:** ```sql IF c1%NOTFOUND THEN -- 处理未找到的情况 ...
例如,DB2支持`WITH`子句的递归查询,而Oracle则有`CONNECT BY`语法来实现相同功能。开发者需要对比两者的语法差异,并对SQL脚本进行修改。 2. **数据库对象迁移**: - 表、视图、存储过程、触发器、索引等数据库...
DB2作为IBM的一款企业级数据库管理系统,在日常运维与开发过程中难免会遇到各种各样的问题。本手册旨在提供全面的DB2错误解决方案,帮助用户快速定位并解决问题。SQLSTATE消息是DB2错误报告的一个重要组成部分,用于...
在DB2数据库管理系统的使用过程中,遇到错误是在所难免的。为了帮助开发者和DB2用户更好地理解并解决这些错误,本文将详细解析DB2中的错误代码——SQLSTATE消息。SQLSTATE是一组五字符的代码,用于描述特定SQL操作的...
在使用DB2的过程中,可能会遇到各种错误代码,这些错误代码通常以`SQLSTATE`的形式出现,用于表示SQL语句执行的结果状态。本文将根据给定的内容详细介绍DB2中的SQLSTATE消息及其含义。 #### SQLSTATE分类 SQLSTATE...
IBM DB2 是一款广泛使用的数据库管理系统,在实际的应用场景中,难免会遇到各种各的各种错误。为了更好地理解和解决这些问题,本文将详细解析 DB2 中的 SQLSTATE 消息异常,以及它们所对应的错误代码和含义。 #### ...
- **Oracle**: 支持递归WITH语法,增加了PIVOT和UNPIVOT操作符;新增函数如LISTAGG、NTH_VALUE等。 - **PostgreSQL**: 支持递归WITH语法,增加了窗口函数的支持。 - **DB2**: 提供与Oracle兼容的语法和数据类型。 - ...
11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用 A.1 DB2的安装和使用 A.2 MySQL的安装和使用 A.3 Oracle的安装和使用 A.4 Microsoft SQL Server的安装和使用