1

我正在使用 sybase 数据库。
我必须从我的表中选择每一行selfjoin(id,salary);

我用

select top 1 * from (select top 4 * from selfjoin order by id desc) order by id

我得到一个错误。

An ORDER BY clause is not allowed in a derived table.

下面的sql也会导致错误

select id from selfjoin order by id asc limit 2
--error :-`Incorrect syntax near 'limit'`

下面的 sql 也会引发错误。

SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS rownumber,salary from selfjoin;
--error :- `Incorrect syntax near the keyword 'OVER'.`

我也阅读了这个链接,但没有任何查询有效。我也检查了这个页面,但没有得到正确的结果。

问题变化:- 表中的薪水按升序排列。即按照工资升序查找第n行。

4

2 回答 2

0

查看以下查询:-

SELECT * from selfjoin s1 where (n-1) =(select count(id) from selfjoin s2 where s1.id>s2.id)

其中 n 是行号

于 2013-02-07T09:56:45.607 回答
0

好吧,如果 id 是一些连续的增量数字,那么您可以执行以下操作:-

create table #tmp2(id numeric identity,name char(9))  
insert into #tmp2 values("B")    
insert into #tmp2 values("C")   
insert into #tmp2 values("D")  
insert into #tmp2 values("E")  
insert into #tmp2 values("F")  
insert into #tmp2 values("G")  
insert into #tmp2 values("H")  
insert into #tmp2 values("I")  
insert into #tmp2 values("J")  
insert into #tmp2 values("K")  
insert into #tmp2 values("L")  

select t1.* from #tmp2 t1,#tmp2 t2  
where t1.id=t2.id*2 ---(nth number)  

或者如果 id 不是从 1 开始,那么

select t1.* from #tmp2 t1,#tmp2 t2
where t1.id=((t1.id+1)-t2.id)*2 ---(nth number)

结果:-

id 名称
2 C
4 E
6 G
8 I
10 K

于 2013-02-07T13:34:21.823 回答