在SQL Server查询中使用返回的变量

时间:2016-05-11 23:48:06

标签: sql sql-server

我正在使用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  

这可能吗?谢谢大家!

2 个答案:

答案 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

http://www.w3schools.com/sql/sql_where.asp

http://www.w3schools.com/sql/sql_orderby.asp