- 浏览: 63613 次
- 性别:
- 来自: 珠海
文章分类
最新评论
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 678--PKselect * from sys.key_con ... -
SQL作业的操作大全
2013-03-21 16:00 867SQL作业的操作全 --定义创建作业DECLARE @ ... -
Oracle创建删除用户、角色、表空间、导入导出..命令总结
2012-12-11 14:18 885//创建临时表空间 create temporary ta ... -
sql 查询出每个科目成绩第一的学生信息
2012-07-10 09:10 5454一次性查询出每个科目的成绩第一的学生,在SQL SERVE ... -
用SQL语句添加删除修改字段等操作
2012-05-28 14:10 2120用SQL语句添加删除修改字段1.增加字段 alter ... -
SQL中 patindex函数的用法
2012-03-13 11:12 1096语法格式:PATINDEX ( '%pattern%' , e ... -
查询DB2多行数据一行显示(精简sql)
2012-02-21 09:45 1751select o1.ORGTYPE,varchar(repla ... -
SQL+Assistant+v4.8&2Bkey
2011-10-25 09:09 792SQL+Assistant+v4.8&2Bkey -
ROW_NUMBER、RANK、DENSE_RANK的用法
2011-10-19 08:39 822ROW_NUMBER、RANK、DENSE_RANK的用法 ... -
用 SQL 语句查看 SQL Server 端口号
2011-09-01 11:00 4386用 SQL 语句查看 SQL Server 2005 端口号 ... -
DB2常用函数与Oracle比较
2011-05-19 09:47 18051、类型转化函数:decimal, double, Inte ... -
oracle 的wmsys.wm_concat函数用法
2011-05-17 14:25 1518无意中碰到wmsys.wm_concat这个函数很好很强大. ... -
Oracle相关的1000个命令
2011-02-23 09:22 1674Oracle相关的1000个命令(实用) 比较适合初学者,所 ... -
Sql Server 常用日期格式
2011-02-19 10:31 803Sql Server 常用日期格式 SQL Server中文 ... -
SQL语句优化34条(常拿来用用)
2011-02-18 08:32 7011)选择最有效率的表名顺序(只在基于规则的优化器中有效): ... -
MS-SQL Server 多行转为一列的合并
2010-12-21 08:40 4193描述:将如下形式的数据按id字段合并value字段。 id ... -
列出一个表的字段的全部信息
2010-12-17 11:00 850select rtrim(b.name) ascolname ... -
汇总数据到一行
2010-11-15 21:17 796--sql server 2005 --执行 select ... -
SQL的行列转化问题
2010-10-21 16:04 1016SQL Server中行列转换 Pivot UnPivot ... -
Oracle 任意两个时间之间的日期 时间列表
2010-10-12 16:18 959如何查找2个时间之间的日期列表? 如查找 2004-01-0 ...
相关推荐
DB2循环递归实例 自己编写的 比较有用的
实现ORACLE 的CONNECT by。可以实现一些难以在db2上实现的递归操作
DB2递归.docx 1. 递归查询和初始查询结果必须包含相同数量的数据列; 2. 递归查询和初始查询结果数据列的、长度等必须一致; 3. 递归查询不能包含 GROUP BY 或者 HAVING 子句; 4. 递归查询不能包含 Outer Join...
sql 2005中用CTE实现递归的很好很易懂很基础的例子讲解。
NULL 博文链接:https://flysky7931.iteye.com/blog/706171
关于递归知识点,让初学者可以更详细地了解递归的使用方法
c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘 n!c++ 递归 阶乘...
二叉树递归非递归遍历(递归前中后,非递归前中后,层次遍历)
10.2.0.3版本有的递归语句查询无结果,但用with改造后,正确显示结果。
下面给大家详细介绍Oracle 11GR2的递归WITH子查询方法,具体内容如下所示: SQL> with emp_data(ename,empno,mgr,l) as (select ename, empno, mgr, 1 lvl from emp where mgr is null union all select emp....
C#递归C#递归C#递归C#递归C#递归C#递归C#递归C#递归C#递归
宏递归宏递归宏递归宏递归宏递归宏递归宏递归宏递归宏递归宏递归
java Java中的递归 java Java中的递归
python基础(补充):关于递归的优化(使用缓存)
pb中使用递归算法实现树的遍历
java中使用递归方法计算阶乘的代码示例
使用环境:需要先安装PyCharm(请自己百度下载安装),以及然后官网上下载Python 2.7版本,以及Python 3.7版本后,安装在自己的电脑上。 使用步骤: ...目的:帮助理解递归函数在Python中的具体使用。
ackman函数的递归和非递归,学习数据结构的素材,非递归是使用堆栈实现的。
一个算法的实现,关于在递归时间复杂度上的考证
sqlserver递归查询树结构的表的根结点子最里层的子结点