Sql 在Sybase ASE中查找第n行?
我正在尝试查找sybase数据库中的第n行。我更熟悉SQL server,所以我决定使用with语句,但由于某些原因,它在sybase中不起作用。你们能解释一下这个代码有什么问题吗Sql 在Sybase ASE中查找第n行?,sql,sybase,sap-ase,Sql,Sybase,Sap Ase,我正在尝试查找sybase数据库中的第n行。我更熟悉SQL server,所以我决定使用with语句,但由于某些原因,它在sybase中不起作用。你们能解释一下这个代码有什么问题吗 With test AS ( select *, row_number() over (order by M_MAT) as 'row' from OM_MAT_DBF ) SELECT * FROM test WHERE row = 2 with和row_number在Sybase ASE中是无效的命
With test AS
(
select *, row_number() over (order by M_MAT) as 'row'
from OM_MAT_DBF
)
SELECT *
FROM test
WHERE row = 2
with和row_number在Sybase ASE中是无效的命令
一个选项是将数据或键数据选择到临时表中,然后使用该临时表查找要查找的行
set rowcount 13 --Use the row number you are looking for to limit rows returned
select rownumber=identity(10), M_MAT
into #temp
from OM_MAT_DBF
order by M_MAT
set rowcount 0
这将创建带有行号的临时表。假设M_MAT是唯一字段:
select *
from OM_MAT_DBF
where M_MAT =
(
select M_MAT
from #temp where rownumber = 13 --And find your requested row
)
如果您计划在一个事务中选择多行,则在创建临时表时始终可以绕过set rowcount命令。如果您想要基于某个列值的表的第n行,则可以使用以下选项:
select *
from xyz X where 3 > (
select count(*)
from xyz
where C1 > X.C1
)
order by C1
这将根据C1列对表进行排序,并给您第3行不知何故,@Xint0的应答器对我不起作用。我结束了对它的修改:
DROP TABLE #Data go
CREATE TABLE #Data (Datum INT, PRIMARY KEY (Datum))
INSERT INTO #Data VALUES (10)
INSERT INTO #Data VALUES (20)
INSERT INTO #Data VALUES (30)
INSERT INTO #Data VALUES (40)
INSERT INTO #Data VALUES (50)
INSERT INTO #Data VALUES (60)
DECLARE @n INT
SET @n = 4 -- find the n-th value
DECLARE @t INT
SELECT @t = count(*) - @n + 1 FROM #Data
SELECT TOP 1 *
FROM #Data X WHERE @t > (
SELECT count(*)
FROM #Data
WHERE Datum > X.Datum
)
ORDER BY Datum
“不工作”这个词太模糊了。在这个例子中是什么意思?关键字“With”附近的语法不正确。你看过文档了吗?Sybase不支持with和row_number。例如,如何准确地选择第三行?我试着使用你的代码,但不管我把它从前2名改为前40名,它都只给我第一行。嗯……我原以为它有效,但现在看来我错了。看来临时表格是最好的选择。更新答案。我不知道为什么你的答案不适合我。我已经发布了一个修改过的答案。