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)
我怎样才能做到这一点?
如果您使用的是支持行号功能的数据库,则一个选项是根据您指定的顺序(即先按升序排列i1
,然后按i2
秒升序)创建带有行号的表的CTE .
然后,使用两个子查询,以确定行号1c
和4a
.这些行号构成您要选择的范围.
;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)
我会这样做:
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)