sql 查询返回满足条件的行和下一行

查询显示
num1---num6里面有49,
下一行也显示出来
select * from basedata where 49 in (num1,num2,num3,num4,num5,num6)
这样只能查询出满足49的行(请看第2张图)

oracle里可以用ROWNUM伪列,写了一个例子用作参考:
with t1 as (select rownum n,a,b,lead(rownum)over(order by rownum) ne from cc)
,t2 as (select n,a,b,ne from t1 where 5 in (a,b))
select n,a,b from t2
union
select n,a,b from t1 where n in (select ne from t2)

把a,b换成你的字段,cc换成你的表名就可以了,我自己用数据测试了下,没问题。追问

我用的是 microsoft SQL

追答

是SQL server么?我没用过,但是思路就是通过主键值查找下一条记录,你把ROWNUM换成主键试试。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-05
在表中加个自增主键,就可以根据查出来符合条件的数据再去找他们的下一条,然后一起返回,希望能帮到你追问

能否写出来看下?

追答

你的表没有自增的主键的,你要建表的时候考虑到这些,一般的肯定要主键的

第2个回答  2014-03-05
你的下一行有什麼用意?与条件没关联啊,还不如随便取一行补上去追问

资料要这样整理.

追答

假设有十笔资料
情况1:
第1、3、5笔资料有49,下一笔资料则是取第6笔资料对吧。
情况2:
第3、8、10笔资料有49,请问下一笔,是不取,还是其他情况?

追问

情况1:
第1、3、5笔资料有49,则取1,2,3,4,5,6笔资料.

因为第1有49, 要显示第1和第2笔的资料,

第3有49, 则要显示第3和第4的资料,
第5有49, 要显示第5和第6的资料,
以此类推显示.

追答

我试了一下,253654522 给的语句可以实现你的功能,按如下语句调试一下,看看是否是你需要的。
with t1 as (select * ,row_number()over(order by [ID]) as Row from [Table])
,t2 as (select * from t1 where 'clo' IN([Num1],[Num2],***) )
select * from t2
union
select * from t1 where Row in (select Row+1 from t2)
order by Row

当然 Select * 最好改成 Select 字段

相似回答