我正在使用SQL Server 2012,我有一个查询,它返回两个列,查询中该项目的项目编号和行号:
Row Item
--------------
1 1234
2 5632
3 4213
4 0912
在运行查询之前,我将知道我只对包含项目5632的行和在包含项目5632的行之后的X行感兴趣(在这种情况下,只允许说第2行和第3行)。但是,我不会提前知道第5632项的行。
我想以某种方式说
Where Row >= Row of Item 5632
And Row <= Row of Item 5632 + X
这可能吗?谢谢大家!
答案 0 :(得分:1)
假设您现在拥有的查询是SELECT RowNo, Item FROM Tbl
,以下查询可以替换它并执行您想要的操作:
DECLARE @Item = 5632
DECLARE @ItemRowNo = SELECT RowNo FROM Tbl WHERE Item = @Item
DECLARE @Qty = 2
SELECT RowNo, Item
FROM Tbl
WHERE Item >= @ItemRowNo
AND Item < (@ItemRowNo + @Qty)
ORDER BY RowNo
如果你给我实际的当前查询,我可以更新这个答案以反映它。
如果它们不变,你可以选择声明少于我所做的事情,但我猜你实际上会从其他地方SELECT
将它们{。}}。
答案 1 :(得分:0)
不止一种方法,我更习惯于嵌套查询
Nested select statement in SQL Server
SQL nested query in SQL server
更具体地说:
SELECT TOP 3 a.row, a.item FROM tableA a
WHERE a.row >= (SELECT row FROM tableA WHERE item = 5632)
ORDER BY a.row
TOP并不担心ROW的实际价值,只是限制检索记录的数量
http://www.w3schools.com/sql/sql_top.asp