导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

求一SQL语句 实现比较没有思路

haoyuzhou009 2007-12-17 07:18:04
输入数据库里面的两个数据
一个是X
一个是区间Y[] 简单如(M,N)

如果X在区间Y内 输出(M,N)
如果X在区间Y外 输入(M,N), X( X在区间(M,N)之前,X在(M,N)之后)

(M,N)内数据有可能因为删改出现不存在情况 输入的X也存在不存在的情况
那种情况选取该不存在的记录的下一条如(2没有找3,3没有找4......)
区间一样(如:[3,N],3不存在则需要查找[4,N]这里可以将N看做一像TOP一样的数比如前100条数据等等)
...全文
109 点赞 收藏 19
写回复
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
you_tube 2007-12-20

http://blog.csdn.net/roy_88/archive/2007/02/13/1509413.aspx
回复
falaly 2007-12-19
union 一下
然后order by 搞定
哪有那么复杂
回复
haoyuzhou009 2007-12-18
这是我碰到的比较麻烦的需求\
我没有能实现,觉得有点代表性,所以来看看大家的想法,有没有碰到类似的情况
项目已经改了方案了,就是两个条件只要一个,就用简单的TOP实现,可我很想知道
这个看起来好象简单的问题,我少考虑了什么东西!~`
回复
haoyuzhou009 2007-12-18
TO'''fcuandy(人, 无完人;学, 无止境)
那还是不对, 即然可以理解为行号
那么比如 m=2,n=102
当数据库中记录有超过102行时,那么这个行号就会存在
如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号?

还是不明白.

----------------- ----------------- -----------------
----------------- ----------------- -----------------
可以理解成行号
当数据库中记录有超过102行时,那么这个行号就会存在
//正常情况
如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号?
//取该记录到最末行
比如数据库只有100行
我要抽取5到达以后的100行 那肯定抽取的是(5-100)行数<100行
输入的X要超出了这个条件就不列如检索条件了

回复
fcuandy 2007-12-18
那还是不对, 即然可以理解为行号
那么比如 m=2,n=102
当数据库中记录有超过102行时,那么这个行号就会存在
如果记录最多只101,那么102行就不存在,102都不存在,又何来下一个行号?

还是不明白.
回复
haoyuzhou009 2007-12-18
TO'''fcuandy(人, 无完人;学, 无止境)
你的意思是说m和n是行号?

----------------- ----------------- -----------------
----------------- ----------------- -----------------
可以理解成行号
但如果输入的m在数据库里没有的话那就要找下一个最接近M的值Y来替换M
然后找Y和Y以后100行内,输入的X是否超出这个区间,X是固定的,没有的话就不考虑X,有的话就要判断是并还是不并

回复
haoyuzhou009 2007-12-18
简单的说
输入一个数 1
再输入一个区间 1-100

SQL得到的效果:1-100

如果输入的是1

再输入的区间是3-103

SQL得到的结果是 1,3-103

当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110

-----------------
这个简单,不过和SQL好像没有什么联系,,,

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


那是我举的例子 方便表述我想说的内容~~
呵呵
----------------- ----------------- -----------------
上面的是理想状态下的数据
也是连续的确特例

现在主要是要做的是如 输入3以后的100位(ID不连续)
然后判断一个数在不在上面的区间内

----------------------
这个还是看不懂,,,

----------------- ----------------- -----------------
----------------- ----------------- -----------------
数据库字段是不连续的
就好象简单的一员工表
员工号由于员工辞职以后将消失
然后就会空出来比如说4号员工辞职了
我们的员工表里面就只有(1,2,3,5...X)
就想描述这个意思
回复
fcuandy 2007-12-18
你的意思是说m和n是行号?
回复
haoyuzhou009 2007-12-18
TO ''victorcai2006
当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110
-------------
????没有看懂~~~

------------- -------------
一个并集合,3-103连续的情况下(3,4,5,...103,110)
回复
haoyuzhou009 2007-12-18
不好意思 昨天晚上没有能抽时间看大家的回复 对不起~~

TO'''fcuandy(人, 无完人;学, 无止境)
设表tb有字段id, id为int,不连续.
楼主是指 以取id从m到n(m <n)之间的记录.及 id=x的记录.
如果m到n之间存在x,那当然取到的就是 m到n
如果m到n之间不存在x:
若x 位于m-n外,即 x <m <n,则到 x union m-n
若x 位于m-n之外,即 m <n <x,则取 m-n union x
-------------------------------------------------------
其实我现在想要的和你说的差不多
但有点比较麻烦的是
我不知道(m,n)中的`n`是多少,所以无法用来做判断条件
因为抽取的数据是从M像后的100行,而此后的100行最后第一百行我找不到
无法用判断(m是一个任意的输入值)新的输入值x在这个区间之外(能判断比之小x<m然后union,但对于x>(m向后数100位的那个数值)
这应该是我最想知道的重点~


回复
haoyuzhou009 2007-12-18
up
回复
victorcai2006 2007-12-17
当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110
-------------
????没有看懂~~~
回复
fcuandy 2007-12-17
设表tb有字段id, id为int,不连续.
楼主是指 以取id从m到n(m<n)之间的记录.及 id=x的记录.
如果m到n之间存在x,那当然取到的就是 m到n
如果m到n之间不存在x:
若x 位于m-n外,即 x<m<n,则到 x union m-n
若x 位于m-n之外,即 m<n<x,则取 m-n union x

是否我说的这个意思? 可能手误.

declare @x int,@m int,@n int
select @x=1,@m=3,@n=103
select *,pri=case when @x between @m and @n then 0 else case when @x<@m then -1 else 1 end end from tb where id=@x
union
select *,pri=0 from tb where id between @m and @n
order by pri,id


或者
select * from tb where id between @m and @n or id=@x order by case when id between @m and @n then 0 else case when id<@m then -1 else 1 end end ,id
回复
dobear_0922 2007-12-17
上面的是理想状态下的数据
也是连续的确特例

现在主要是要做的是如 输入3以后的100位(ID不连续)
然后判断一个数在不在上面的区间内

----------------------
这个还是看不懂,,,
回复
dobear_0922 2007-12-17
简单的说
输入一个数 1
再输入一个区间 1-100

SQL得到的效果:1-100

如果输入的是1

再输入的区间是3-103

SQL得到的结果是 1,3-103

当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110

-----------------
这个简单,不过和SQL好像没有什么联系,,,
回复
haoyuzhou009 2007-12-17
上面的是理想状态下的数据
也是连续的确特例

现在主要是要做的是如 输入3以后的100位(ID不连续)
然后判断一个数在不在上面的区间内
我弄了一下午 没有弄出老
嘿郁闷
回复
haoyuzhou009 2007-12-17
简单的说
输入一个数 1
再输入一个区间 1-100

SQL得到的效果:1-100

如果输入的是1

再输入的区间是3-103

SQL得到的结果是 1,3-103

当输入的数是不是110
再输入的区间是3-103
输出的结果是 3-103,110

回复
liangCK 2007-12-17
我看了半小时.没看明白.
回复
dobear_0922 2007-12-17
看不明白,,,
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告