选择两列范围之间的值

Ana*_*Ana 5 sql sql-server sql-server-2014

我有这样一张桌子:

i1   i2
----------
1    a
1    b
1    c
1    d
2    x
3    y
4    a
4    b
4    c
Run Code Online (Sandbox Code Playgroud)

我想选择1 c和4 a之间的行.
结果应该是:

1 c
1 d 
2 x 
3 y 
4 a
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Tim*_*sen 5

如果您使用的是支持行号功能的数据库,则一个选项是根据您指定的顺序(即先按升序排列i1,然后按i2秒升序)创建带有行号的表的CTE .

然后,使用两个子查询,以确定行号1c4a.这些行号构成您要选择的范围.

;WITH cte AS (
    SELECT ROW_NUMBER() OVER (ORDER BY i1, i2) AS RowNumber, i1, i2
    FROM yourTable
)

SELECT *
FROM cte t
WHERE t.RowNumber >= (SELECT RowNumber FROM cte WHERE i1=1 AND i2='c') AND
      t.RowNumber <= (SELECT RowNumber FROM cte WHERE i1=4 AND i2='a')
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 5

我会这样做:

select t.*
from t
where (i1 > 1 or (i1 = 1 and i2 >= 'c')) and
      (i1 < 4 or (i1 = 4 and i2 <= 'a'));
Run Code Online (Sandbox Code Playgroud)