oracle

推荐列表 站点导航

当前位置:首页 > 数据库 > oracle >

深入sql oracle递归查询

来源:网络整理  作者:  发布时间:2020-12-15 21:52
本篇文章是对sql oracle 递归查询进行了详细的分析介绍,需要的朋友参考下...

复制代码 代码如下:

)
SELECT *,
SELECT * FROM aaa
CREATE TABLE [aaa](
select * from my1 --结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1
WITH my1 AS (
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:
[id] [int] NULL,
(--下级父项
今天帮别人做了一个有点意思的sql,也是用递归实现,具体如下:
FROM my1
CREATE TABLE [tb](
INSERT INTO aaa VALUES(8,4,'h')

delete from aaa where exists (select id from my1 where my1.id = aaa.id)
[je] [int] NULL, -- 本月销售实际金额
ELSE 0
)
select t.id,t.parentid,t.text from treeview as t
CONNECT BY pid = PRIOR id
[rwe] [int] NULL, -- 本月销售任务额
my1.fle + my1.tmp tmp -- 用于累加前面月份的返利
现在要求计算每个月的返利金额,规则如下:
* tb.fld
as
CONNECT BY PRIOR pid = id
--下面的Sql是查询出8结点的所有父结点
inner join cte as c on t.id = c.parentid
--下面是递归删除1结点和所有子结点的语句:
2月份销售金额大于任务额 返利额=(金额-1月份返利额)*返利点
FROM my1,
select id,parentid,text from cte
INSERT INTO aaa VALUES(6,3,'f')
union all select aaa.* from my1, aaa where my1.id = aaa.pid
[name] [nchar](10)
)
START WITH id = 8
[fld] [float] NULL -- 本月金额大于任务额时的返利点,返利额为je*fld
ELSE 0
CAST(0 AS FLOAT) tmp
union all
---------------------
CASE
3月份销售金额大于任务额 返利额=(金额-1,2月份返利额)*返利点
WHERE tb.qj = my1.qj + 1
--下面的Sql是查询出8结点的所有父结点
select * from my1;
END fle,
INSERT INTO aaa VALUES(4,1,'d')
with my1 as(select * from aaa where id = 1
--由父项递归下级
举例说明:
with cte(id,parentid,text)
Oracle版本的Sql如下:
select id,parentid,text from cte
具体的Sql如下:

以后月份依次类推,销售额小于任务额时,返利为0
假设有个销售表如下:
SQLserver2008使用表达式递归查询
with my1 as(select * from aaa where id = 1
inner join cte as c on t.parentid = c.id
)
INSERT INTO aaa VALUES(3,1,'c')
WHERE qj = 1
select id,parentid,text from treeview where id = 450
select t.id,t.parentid,t.text from treeview as t
)
SELECT tb.*,
CASE
WHEN tb.je > tb.rwe THEN (tb.je - my1.fle -my1.tmp)
INSERT INTO aaa VALUES(2,0,'b')
as
)
union all
--递归结果集中的下级
)
select id,parentid,text from treeview where parentid = 450
START WITH id = 1
with cte(id,parentid,text)
☆ 获取数据库所有表名,表的所有列名
Sql语句里的递归查询 SqlServer2005和Oracle 两个版本
☆ 递归查询数据
--下面的Sql是查询出1结点的所有子结点
) ON [PRIMARY]
--下面的Sql是查询出1结点的所有子结点
union all select aaa.* from my1, aaa where my1.pid = aaa.id
SqlServer2005版本的Sql如下:
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and)
1月份销售金额大于任务额 返利额=金额*返利点
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据请参考SqlServer2005的,Sql如下:
union all select aaa.* from my1, aaa where my1.id = aaa.pid
WHEN je > rwe THEN (je * fld)
GO
--由子级递归父项
以前使用Oracle,觉得它的递归查询很好用,就研究了一下SqlServer,发现它也支持在Sql里递归查询
INSERT INTO aaa VALUES(1,0,'a')

[pid] [int] NULL,
SELECT *
tb
UNION ALL
GO
--递归结果集中的父项
with my1 as(select * from aaa where id = 8
(--父项
FROM tb
select name from sysobjects where xtype='u'
INSERT INTO aaa VALUES(5,2,'e')
[qj] [int] NULL, -- 月份,本测试假设从1月份开始,并且数据都是连续的月份,中间没有隔断
INSERT INTO aaa VALUES(7,3,'g')
END fle,
SELECT * FROM aaa


相关热词: oracle

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://v30.fanwenzhu.com/sql/oracle/4249.shtml

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

深入sql oracle递归查询

2020-12-15 编辑:

复制代码 代码如下:

)
SELECT *,
SELECT * FROM aaa
CREATE TABLE [aaa](
select * from my1 --结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1
WITH my1 AS (
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:
[id] [int] NULL,
(--下级父项
今天帮别人做了一个有点意思的sql,也是用递归实现,具体如下:
FROM my1
CREATE TABLE [tb](
INSERT INTO aaa VALUES(8,4,'h')

delete from aaa where exists (select id from my1 where my1.id = aaa.id)
[je] [int] NULL, -- 本月销售实际金额
ELSE 0
)
select t.id,t.parentid,t.text from treeview as t
CONNECT BY pid = PRIOR id
[rwe] [int] NULL, -- 本月销售任务额
my1.fle + my1.tmp tmp -- 用于累加前面月份的返利
现在要求计算每个月的返利金额,规则如下:
* tb.fld
as
CONNECT BY PRIOR pid = id
--下面的Sql是查询出8结点的所有父结点
inner join cte as c on t.id = c.parentid
--下面是递归删除1结点和所有子结点的语句:
2月份销售金额大于任务额 返利额=(金额-1月份返利额)*返利点
FROM my1,
select id,parentid,text from cte
INSERT INTO aaa VALUES(6,3,'f')
union all select aaa.* from my1, aaa where my1.id = aaa.pid
[name] [nchar](10)
)
START WITH id = 8
[fld] [float] NULL -- 本月金额大于任务额时的返利点,返利额为je*fld
ELSE 0
CAST(0 AS FLOAT) tmp
union all
---------------------
CASE
3月份销售金额大于任务额 返利额=(金额-1,2月份返利额)*返利点
WHERE tb.qj = my1.qj + 1
--下面的Sql是查询出8结点的所有父结点
select * from my1;
END fle,
INSERT INTO aaa VALUES(4,1,'d')
with my1 as(select * from aaa where id = 1
--由父项递归下级
举例说明:
with cte(id,parentid,text)
Oracle版本的Sql如下:
select id,parentid,text from cte
具体的Sql如下:

以后月份依次类推,销售额小于任务额时,返利为0
假设有个销售表如下:
SQLserver2008使用表达式递归查询
with my1 as(select * from aaa where id = 1
inner join cte as c on t.parentid = c.id
)
INSERT INTO aaa VALUES(3,1,'c')
WHERE qj = 1
select id,parentid,text from treeview where id = 450
select t.id,t.parentid,t.text from treeview as t
)
SELECT tb.*,
CASE
WHEN tb.je > tb.rwe THEN (tb.je - my1.fle -my1.tmp)
INSERT INTO aaa VALUES(2,0,'b')
as
)
union all
--递归结果集中的下级
)
select id,parentid,text from treeview where parentid = 450
START WITH id = 1
with cte(id,parentid,text)
☆ 获取数据库所有表名,表的所有列名
Sql语句里的递归查询 SqlServer2005和Oracle 两个版本
☆ 递归查询数据
--下面的Sql是查询出1结点的所有子结点
) ON [PRIMARY]
--下面的Sql是查询出1结点的所有子结点
union all select aaa.* from my1, aaa where my1.pid = aaa.id
SqlServer2005版本的Sql如下:
select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and)
1月份销售金额大于任务额 返利额=金额*返利点
比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据请参考SqlServer2005的,Sql如下:
union all select aaa.* from my1, aaa where my1.id = aaa.pid
WHEN je > rwe THEN (je * fld)
GO
--由子级递归父项
以前使用Oracle,觉得它的递归查询很好用,就研究了一下SqlServer,发现它也支持在Sql里递归查询
INSERT INTO aaa VALUES(1,0,'a')

[pid] [int] NULL,
SELECT *
tb
UNION ALL
GO
--递归结果集中的父项
with my1 as(select * from aaa where id = 8
(--父项
FROM tb
select name from sysobjects where xtype='u'
INSERT INTO aaa VALUES(5,2,'e')
[qj] [int] NULL, -- 月份,本测试假设从1月份开始,并且数据都是连续的月份,中间没有隔断
INSERT INTO aaa VALUES(7,3,'g')
END fle,
SELECT * FROM aaa


本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://v30.fanwenzhu.com/sql/oracle/4249.shtml

相关文章

风云图片

推荐阅读

返回oracle频道首页