如何做SQL在AS400中选择前N ...

Jam*_*ore 28 sql ibm-midrange

你是怎么表演的

Select top N * from as400table
Run Code Online (Sandbox Code Playgroud)

对as400/db2数据库进行类型查询

Jam*_*ore 47

Select col1,col2
from 
as400table
where col1='filter'
order by col1
fetch first N row only
Run Code Online (Sandbox Code Playgroud)

请记住设置一个ORDER BY子句,因为DB2不保证返回的行FETCH FIRST N ROW ONLY总是相同的N.


aje*_*jeh 13

严格来说,DB2中没有TOP N的等价物.

SELECT 1 FROM sysibm.sysdummy1
    WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1)
FETCH FIRST ROW ONLY
Run Code Online (Sandbox Code Playgroud)

编译并运行,但是

SELECT 1 FROM sysibm.sysdummy1
    WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
Run Code Online (Sandbox Code Playgroud)

不会编译.

TOP N并且FETCH FIRST N不一样.FETCH FIRST 每个查询只能使用一次,而TOP N可以在任何子选择中使用.

您可以在子查询中使用窗口函数来模拟TOP N:

select *
from (
    select id, row_number()
    over (order by id) as rn
    from testsch.testtbl
) as r
where r.rn < 100 -- This is N rows you are looking for
Run Code Online (Sandbox Code Playgroud)

这将返回99行.我在iSeries 7中尝试过它并且它有效.