知识大全 用SQL语句求排除断号的号码串
Posted 票据
篇首语:多练多乖,不练就呆。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用SQL语句求排除断号的号码串相关的知识,希望对你有一定的参考价值。
用SQL语句求排除断号的号码串 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一用户对缴款日报中的票据号使用情况提出要求 希望以类似 的方式展现 以便直观地反映实际使用的票据号情况
我们经过分析发现 实现这一需求的难点主要有两点
. 如果要找出断号 用SQL语句实现 主要是要考虑性能
. 将排除断后的使用号码段的多条记录转换为一行显示 即用SQL实现行列转换
如果通过编程来实现 这两点都不难 但通过SQL来实现 则需要一些技巧
假设知道已用票据号为 最小为 最大为 求断号的SQL如下
Select Rownum + ( )
From Dual
Connect By Rownum <= ( )
Minus
Select Column_Value Txt From Table(Cast(Zltools f_Num list( ) As Zltools t_Numlist))
求出的结果是三条记录
其中用到一个技巧就是用Connect by Rownum来产生按顺序增长的记录集
求转换为一行显示的已用票据段的SQL如下
With TEST As(
Select Column_Value 编号 From Table(Cast(Zltools f_Num list( ) As Zltools t_Numlist))
)
Select Substr(Max(LPAD(Length(分段) ) || 分段) ) As 分段
From (
Select Sys_Connect_By_Path(分段 ) As 分段
From (
Select Rownum As 行号 A 起始号|| ||(B 中断号 ) As 分段
From (
Select Rownum As 行号 编号 As 起始号
From (
Select 编号 From TEST
Minus
Select 编号+ From TEST)
) A
(Select Rownum As 行号 编号 As 中断号 From (
Select 编号+ As 编号 From TEST
Minus
Select 编号 From TEST)
) B
Where A 行号=B 行号)
Start With 行号 =
Connect By (行号 ) = Prior 行号)
查询结果
其中用到以下技巧
. 用minus方式求已用号码段的起始号和终止号的记录集
. 用Sys_Connect_By_Path函数和树型查询实现多行记录转换为一列
. 用Substr Max LPAD Length几个函数的组合来求最长的一条记录
如是Oracle G及以后的版本 可以使用一个新的函数Wmsys Wm_Concat 比前面树型查询的速度要快很多
With TEST As(
Select Column_Value 编号 From Table(Cast(Zltools f_Num list( ) As Zltools t_Numlist))
)
Select Wmsys Wm_Concat(分段) as 分段
From (
Select Rownum As 行号 A 起始号|| ||(B 中断号 ) As 分段
From (
Select Rownum As 行号 编号 As 起始号
From (
Select 编号 From TEST
Minus
Select 编号+ From TEST)
) A
(Select Rownum As 行号 编号 As 中断号 From (
Select 编号+ As 编号 From TEST
Minus
Select 编号 From TEST)
) B
cha138/Article/program/Oracle/201311/17815相关参考
用sql语句动态的创建access表的代如下! <% nowtime=now()tablename=cstr(year(nowtime))
知识大全 SQL Server中巧用另类写法代替Like语句
SQLServer中巧用另类写法代替Like语句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
每次在操作数据库的时候最烦的就是根据表单提交的内容写sql语句特别是字段比较多的时候很麻烦动不动就容易写错所以我就写了下面的生成sql语句的函数用了用觉得还可以 程序代码 <%=====
oracle构造添加字段的SQL语句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用ORACL
ADO.NETSQL语句检索说明 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 下面用实例进行介
用手机号码启用淘宝支付宝帐号要收费吗?求大神帮助系结手机后您可以获得用手机自助找回密码、开启余额支付功能、自助管理数字证书等,方便!目前使用此项服务是免费的如何系结手机开通手机提醒服务:help.al
SQL基本语句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 掌握SQL四条最基本的数据*作语句
有时候我们经常为我们的sql语句执行效率低下发愁反复优化后可还是得不到提高 那么你就用这条语句找出你sql到底是在哪里慢了 示例 SETSTATISTICSioON &
SQL语句获取日期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL语句获取特定日期 一个
下面为您介绍的是查询表的字段名的sql语句写法sql语句可以实现许多的功能希望可以您在学习sql语句使用方面获得启示 selectnamefromsyscolumnswhereid=(selec