`

db2中关于递归(with)的使用

阅读更多

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

 

分享到:
评论

相关推荐

    DB2循环递归实例很有用的

    在DB2中,循环递归查询主要通过使用Common Table Expressions(CTEs,公共表表达式)来实现。CTE是一种临时的结果集,它可以在同一个查询语句中被多次引用。对于循环递归查询而言,CTE允许用户定义一个递归结构,...

    在db2和oracle中的对树的递归查询语句

    同时,为了防止无限递归,通常会设置一个最大递归深度,比如Oracle的`CONNECT_BY_ISCYCLE`和DB2的`WITH RECURSIVE`中的循环检测。 在实际应用中,了解并熟练掌握这些递归查询技巧对于处理树形结构的数据至关重要。...

    DB2递归.docx

    以下是对DB2递归SQL的详细解释: 1. **递归查询的基本结构** - **初始查询**:这是CTE中对基础表进行查询的部分,不引用CTE本身,用于获取递归的起点。 - **递归查询**:在FROM子句中引用CTE,形成递归。递归查询...

    将 CONNECT BY 移植到 DB2

    本文旨在指导读者如何将 Oracle 数据库中的 `CONNECT BY` 语法及其相关的伪列转换为适用于 IBM DB2 Universal Database (DB2 UDB) for Linux、UNIX 和 Windows 的递归公共表表达式 (Recursive Common Table ...

    DB2公共表表达式(WITH语句使用).pdf

    【DB2公共表表达式(WITH语句使用)】 公共表表达式(Common Table Expression,简称CTE)在DB2数据库系统中是一个非常强大的工具,主要用于定义临时的、只在查询过程中存在的表。WITH语句使得复杂的查询变得更加...

    Oracle 11GR2的递归WITH子查询方法

    与其他数据库系统(如DB2、Firebird、Microsoft SQL Server、PostgreSQL)相比,虽然Oracle较晚引入递归WITH子查询,但它仍然是一个强大的补充,特别适用于处理需要递归操作的数据。理解并掌握这一特性,对于优化...

    db2迁移到mysql.docx

    同样地,在DB2中使用`TO_DATE`函数转换字符串为日期时间,而在MySQL中则使用`STR_TO_DATE`函数。 ```sql -- DB2 SELECT F_GET_STR_TO_DATE(startDate DATETIME, split_format VARCHAR(25), dateType VARCHAR(3)) --...

    DB2兼容模式设置文档

    - **递归查询验证**:使用`CONNECT BY`语法(在DB2中使用其他方法)验证递归查询。 - **左连接验证**:通过创建两个表并进行左连接操作来验证。 - **DUAL表验证**:在DB2中创建一个名为`DUAL`的空表并查询。 - *...

    ORACLE转DB2对照全解

    **注意:** 在DB2中,UDF和触发器中也可以使用游标,但语法略有不同。 ##### 3.3 转换游标的属性 游标的属性可以帮助开发者获取游标的状态信息。 **Oracle:** ```sql IF c1%NOTFOUND THEN -- 处理未找到的情况 ...

    面试:如果在现在开发时使用的数据库是DB2(IBM的数据库产品),可能要使用Oracle。在这种背景下,如何开发?

    例如,DB2支持`WITH`子句的递归查询,而Oracle则有`CONNECT BY`语法来实现相同功能。开发者需要对比两者的语法差异,并对SQL脚本进行修改。 2. **数据库对象迁移**: - 表、视图、存储过程、触发器、索引等数据库...

    DB2错误解决手册

    DB2作为IBM的一款企业级数据库管理系统,在日常运维与开发过程中难免会遇到各种各样的问题。本手册旨在提供全面的DB2错误解决方案,帮助用户快速定位并解决问题。SQLSTATE消息是DB2错误报告的一个重要组成部分,用于...

    DB2错误代码.doc

    在DB2数据库管理系统的使用过程中,遇到错误是在所难免的。为了帮助开发者和DB2用户更好地理解并解决这些错误,本文将详细解析DB2中的错误代码——SQLSTATE消息。SQLSTATE是一组五字符的代码,用于描述特定SQL操作的...

    db2错误代码

    在使用DB2的过程中,可能会遇到各种错误代码,这些错误代码通常以`SQLSTATE`的形式出现,用于表示SQL语句执行的结果状态。本文将根据给定的内容详细介绍DB2中的SQLSTATE消息及其含义。 #### SQLSTATE分类 SQLSTATE...

    DB2 错误代码

    IBM DB2 是一款广泛使用的数据库管理系统,在实际的应用场景中,难免会遇到各种各的各种错误。为了更好地理解和解决这些问题,本文将详细解析 DB2 中的 SQLSTATE 消息异常,以及它们所对应的错误代码和含义。 #### ...

    SQL袖珍参考手册(第3版)

    - **Oracle**: 支持递归WITH语法,增加了PIVOT和UNPIVOT操作符;新增函数如LISTAGG、NTH_VALUE等。 - **PostgreSQL**: 支持递归WITH语法,增加了窗口函数的支持。 - **DB2**: 提供与Oracle兼容的语法和数据类型。 - ...

    程序员的SQL金典.rar

     11.9.3 My SQL Server和DB2中递归查询 附录A 常用数据库系统的安装和使用  A.1 DB2的安装和使用  A.2 MySQL的安装和使用  A.3 Oracle的安装和使用  A.4 Microsoft SQL Server的安装和使用

Global site tag (gtag.js) - Google Analytics