^^^^^高手查询^^^^^^^

Jipi 2003-09-12 11:19:11
我有记录内容如下
field1 field2
111111 222222
222223 444444
444445 666666
要得出 111111-666666
field1 field2
111111 222222
333333 444444
444445 666666
要得出 111111-222222
333333-666666
如何实现,谢谢各位高手朋友

...全文
76 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
w_rose 2003-09-14
  • 打赏
  • 举报
回复
假设“开始编号”和“结束编号”没有重复:

select * into #ta from 序号表 where 1=2
while 1=1
begin
insert #ta select x.开始编号,y.结束编号
from 序号表 as x inner join 序号表 as y on y.开始编号=x.结束编号+1
if not exists(select * from #ta) break

delete 序号表
insert 序号表 select * from #a
end
select * from 序号表



如果“开始编号”或者“结束编号”有重复,要首先处理一下,将重复记录只留下一个。
w_rose 2003-09-14
  • 打赏
  • 举报
回复
用SQL语言擅长的风格写程序,就像精神正常的人说话一样自然。

相比之下,用C++写程序,就像是“祥林嫂”一样徐徐叨叨的,或者就像老夫子一样“迂腐”。
Jipi 2003-09-13
  • 打赏
  • 举报
回复
说拍了就是判断这两个字段的数是不是连续的,如果是得出最小与最大值
111111 222222
222223 444444
444445 666666
111111-222222 到222223 -444444 到444445-666666
222222-222223是连续的....
得出111111-666666,表结构如不对要怎么改才好实现呢
w_rose 2003-09-13
  • 打赏
  • 举报
回复
declare @a int,@b int,@c int,@d int
while 1=1
begin
select top 1 @a=x.开始编号,@b=x.结束编号,@c=y.开始编号,@d=y.结束编号
from 序号表 as x inner join 序号表 as y on y.开始编号=x.结束编号+1
if @@rowcount=0 break

delete 序号表 where 开始编号=@c and 结束编号=@d
update 序号表 set 结束编号=@d where 开始编号=@a and 结束编号=@b
end
select * from 序号表


非常希望各位注意:不要受到3GL编程语言的狭隘思维方式的束缚。
eastpond 2003-09-13
  • 打赏
  • 举报
回复
应该有相同的帖子呀,找找看
yujohny 2003-09-13
  • 打赏
  • 举报
回复
规则有点看不明白,请说出规则
zhbname 2003-09-13
  • 打赏
  • 举报
回复
寫存儲過程用遞歸。通過自聯接選取。
這個問題相同於一個樹,有父節點子節點了。
因為你的表結構是這樣建的,所以隻有用遞歸了。
hdslah 2003-09-13
  • 打赏
  • 举报
回复
不知你意思
yunfeng007 2003-09-13
  • 打赏
  • 举报
回复
??有点看不懂啊
happy_0325 2003-09-13
  • 打赏
  • 举报
回复
不明白。
wenbo_ying 2003-09-12
  • 打赏
  • 举报
回复
什么规则啊,说明白一点啊
在网上找了一个 Asp数据操作组件(百万级分页) ,实用环境:Asp+DLL+MsSQL(这个网上很多地方都可以下载),并且其中结合SQL存储过程,说实话以前SQL存储过程接触的比较少,所以在调试该组件的时候遇到了一些问题,并试着改了一下(作者别生气(^..^)),高手们别笑话我。 原代码如下: 有分页列表数据: cls.tblName="Tablename" '表名 cls.fldName="Id" '排序关键字段 cls.PageIndex=Request("P")*1 '当前页码 cls.PageSize=20 '每页列数 cls.OrderType=1 '排序方式,0 、1 cls.strWhere=StrW '查询条件,不带Where cls.ListUrl="?Y="&Y&"&M="&M&"&D="&D&"&Sn="&Sn&"&P=" 分页URL Set Rs=cls.Result do while not rs.eof rs.movenext loop 分页数据 cls.page 在原文的使用说明中,在翻页代码中对表查询默认是全部字段也就是*,这样是不是会浪费资源,而无法查询需要的字段,于是我在DLL代码中新加入一个变量名为zdName,作为传递可控制查询条件的变量,同时在SQL存储过程中也加入相应的接受变量@zdName 字符型。 在这个小问题解决后,又在使用上发现cls.strWhere付给它的变量StrW 如果条件变量其中带有类似 例如 a='b'则执行SQL存储过程时候会提示错误,后来发现是DLL代码中: sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " 这个地方是否写的不够严谨,在StrW中如果含有单引,那么将无法执行,所以我在DLL的VB代码改成 If InStr(strWhere, "'") 0 Then sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",""" & strWhere & """ " Else sql = "exec GetList " & tblName & "," & fldName & "," & PageSize & "," & PageIndex & "," & OrderType & ",'" & strWhere & "' " End If 试了试目前的问题确实解决了,这个组件我也是刚刚使用,希望对大家能有点帮助!

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧