☆ 获取数据库所有表名,表的所有列名   select name from sysobjects where xtype='u'

select name from syscolumns where id=(select max(id) from sysobjects where xtype='u' and name='表名')

☆ 递归查询数据Sql语句里的递归查询 SqlServer2005和Oracle 两个版本

以前使用Oracle,觉得它的递归查询很好用,就研究了一下SqlServer,发现它也支持在Sql里递归查询

举例说明:

SqlServer2005版本的Sql如下:比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据:

CREATE TABLE [aaa](

[id] [int] NULL,

[pid] [int] NULL,

[name] [nchar](10)

)

GO

INSERT INTO aaa VALUES(1,0,'a')

INSERT INTO aaa VALUES(2,0,'b')

INSERT INTO aaa VALUES(3,1,'c')

INSERT INTO aaa VALUES(4,1,'d')

INSERT INTO aaa VALUES(5,2,'e')

INSERT INTO aaa VALUES(6,3,'f')

INSERT INTO aaa VALUES(7,3,'g')

INSERT INTO aaa VALUES(8,4,'h')

GO

--下面的Sql是查询出1结点的所有子结点with my1 as(select * from aaa where id = 1

union all select aaa.* from my1, aaa where my1.id = aaa.pid

)

select * from my1 --结果包含1这条记录,如果不想包含,可以在最后加上:where id <> 1

--下面的Sql是查询出8结点的所有父结点with my1 as(select * from aaa where id = 8

union all select aaa.* from my1, aaa where my1.pid = aaa.id

)

select * from my1;

--下面是递归删除1结点和所有子结点的语句:with my1 as(select * from aaa where id = 1

union all select aaa.* from my1, aaa where my1.id = aaa.pid

)

delete from aaa where exists (select id from my1 where my1.id = aaa.id)

Oracle版本的Sql如下:比如一个表,有id和pId字段,id是主键,pid表示它的上级节点,表结构和数据请参考SqlServer2005的,Sql如下:

--下面的Sql是查询出1结点的所有子结点 SELECT * FROM aaa

START WITH id = 1

CONNECT BY pid = PRIOR id

--下面的Sql是查询出8结点的所有父结点 SELECT * FROM aaa

START WITH id = 8

CONNECT BY PRIOR pid = id

今天帮别人做了一个有点意思的sql,也是用递归实现,具体如下:

假设有个销售表如下:CREATE TABLE [tb](

[qj] [int] NULL,    -- 月份,本测试假设从1月份开始,并且数据都是连续的月份,中间没有隔断

[je] [int] NULL,    -- 本月销售实际金额

[rwe] [int] NULL,    -- 本月销售任务额

[fld] [float] NULL    -- 本月金额大于任务额时的返利点,返利额为je*fld

) ON [PRIMARY]

现在要求计算每个月的返利金额,规则如下:1月份销售金额大于任务额  返利额=金额*返利点

2月份销售金额大于任务额  返利额=(金额-1月份返利额)*返利点

3月份销售金额大于任务额  返利额=(金额-1,2月份返利额)*返利点

以后月份依次类推,销售额小于任务额时,返利为0

具体的Sql如下:

WITH my1 AS (

SELECT *,

CASE

WHEN je > rwe THEN (je * fld)

ELSE 0

END fle,

CAST(0 AS FLOAT) tmp

FROM   tb

WHERE  qj = 1

UNION ALL

SELECT tb.*,

CASE

WHEN tb.je > tb.rwe THEN (tb.je - my1.fle -my1.tmp)

* tb.fld

ELSE 0

END fle,

my1.fle + my1.tmp tmp -- 用于累加前面月份的返利

FROM   my1,

tb

WHERE  tb.qj = my1.qj + 1

)

SELECT *

FROM   my1

SQLserver2008使用表达式递归查询

--由父项递归下级

with cte(id,parentid,text)

as

(--父项

select id,parentid,text from treeview where parentid = 450

union all

--递归结果集中的下级

select t.id,t.parentid,t.text from treeview as t

inner join cte as c on t.parentid = c.id

)

select id,parentid,text from cte

---------------------

--由子级递归父项

with cte(id,parentid,text)

as

(--下级父项

select id,parentid,text from treeview where id = 450

union all

--递归结果集中的父项

select t.id,t.parentid,t.text from treeview as t

inner join cte as c on t.id = c.parentid

)

select id,parentid,text from cte

oracle 递归查询,深入sql oracle递归查询相关推荐

  1. oracle 当前top sql,Oracle top 查询TOP SQL

    有时Oracle数据库服务器,系统CPU爆高,通过Top命令可以查看到占用CPU最高的进程 我们需要记住前几个TOP的pid号,带入下面的SQL,到数据库中查询运行的进程.服务器.用户.SQL.等待等 ...

  2. oracle 不等函数,SQL(Oracle)日常使用与不常使用函数的汇总

    --日常使用的sql语句和oracle语句,有些相对使用的频率比较高,收藏起来还是比较值得的 -- 绝对值 SQL:select abs(-1) value Oracle:select abs(-1) ...

  3. oracle bom层级sql,oracle bom_tree.sql

    oracle bom_tree.sql CREATE OR REPLACE FUNCTION BOM_TREE(vpart_no IN parts.part_no%TYPE,mm in varchar ...

  4. oracle group by sql,Oracle SQL GROUP BY“不是GROUP BY表达式”的帮助

    我有一张table some_table +--------+----------+---------------------+-------+ | id | other_id | date_valu ...

  5. oracle 分组 top10 sql,oracle sql 合龙 分组 聚合函数

    oracle sql 合并 分组 聚合函数 工作中有一需求,要根据多个表的数据统计情况来更新另外一个表中的某个字段,折腾了会才写出如下sql: --最终版更新语句 update moka_user_u ...

  6. 查oracle执行的sql,oracle查询正在执行的sql

    --oracle查看锁表进程,杀掉锁表进程 --查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_ ...

  7. oracle ebcdic 转换,sql - oracle ebcdic sqlldr问题 - 堆栈内存溢出

    我有一个关于如何将EBCDIC文件加载到Oracle表中的问题. 我已经阅读了许多有关该问题的主题. 但是,我似乎仍然无法取得进展. 根据COBOL副本给我的定义,我构建了如下控制文件:EBCDIC. ...

  8. dec在oracle中,在SQL – Oracle中查找匹配的间隔

    我有一张桌子: 表: start end 1 Jan 09 31 Jan 2009 1 Feb 09 28 Feb 2009 1 Mar 09 31 Mar 2009 1 Apr 09 01 May ...

  9. oracle日期的sql,Oracle中一些和日期有关的SQL查询

    1.判断某一天是周几 select to_char(sysdate,'day') from dual; select to_char(to_date('2007-11-20','yyyy-mm-dd' ...

最新文章

  1. MATLAB 2014a (8.3) Compiler Runtime (MCR)
  2. Leetcode 剑指 Offer 13. 机器人的运动范围 (每日一题 20210906)
  3. “80后”作家应扮演更重要的角色
  4. [PAT乙级]1046 划拳
  5. Java笔记02-OOP
  6. NAT(网络地址转换)实现方式
  7. hive jdbc 访问 配置_Hive入门级教程(详细)
  8. 国产处理器的逆袭机会——RISC-V
  9. ubuntu20 关闭防火墙_ubuntu中如何关闭防火墙
  10. 一度智信:拼多多探路知识普惠
  11. 三至六世紀浙東地區的經濟發展
  12. java设计校园网登录界面_java毕业设计_springboot框架的校园网的大学生社交网站...
  13. 分享5个常用的CMD命令。
  14. kubectl k8s 复制文件从宿主机到pod内或从pod到宿主机内
  15. 原来在SOLIDWORKS中,把马鞍面填充为实体这么简单!
  16. 计算机科学与技术考研预报名,考研预报名有哪些注意事项
  17. java poi导出word 多表格 页眉 非xml
  18. 2007年图灵奖--克拉克、埃默生、希法凯斯简介
  19. IDEA 设置保存时自动格式化代码 - 中文界面
  20. EMC经典问答85问(1-5问)

热门文章

  1. 2021.01.14【NOIP提高B组】模拟 总结
  2. 爬虫凶猛:爬支付宝、爬微信、窃取现金贷放贷数据
  3. 奇舞周刊第 363 期:鸿蒙系统中的 JS 开发框架
  4. Discuz!十问戴志康: Discuz! Q的未来不只是社区!
  5. rockniu@live.com是我的MSN帐号,欢迎朋友们加我探讨技术.
  6. Novell NetWare 及其协议--网络大典
  7. 暗黑起源服务器维护,[端游]传奇暗黑起源三职业恐怖的黎明VA1.0版本_雕文系统_暗黑重铸...
  8. 安装MaxDos7.1后的流氓插件so.dll,wmiprvse.exe,knlrun.sys的清除
  9. CAD2007中圆角工具如何使用?
  10. vue 中 [__ob__: Observer]问题