How do you perform a
Select top N * from as400table
type query against an as400/db2 database
It will return the top number of rows in the result set based on top_value. For example, TOP(10) would return the top 10 rows from the full result set. Optional.
The TOP clause allows us to limit the result set of the queries according to the number of rows or the percentage of rows. In general, the TOP and ORDER BY construction are used together. Otherwise, the TOP clause will return the N number of rows in an uncertain order.
Select col1,col2 from as400table where col1='filter' order by col1 fetch first N row only
Remember to set an ORDER BY
clause, because DB2 does not guarantee that the rows returned by FETCH FIRST N ROW ONLY
are always the same N.
Strictly, there is no equivalent of TOP N in DB2.
SELECT 1 FROM sysibm.sysdummy1 WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1) FETCH FIRST ROW ONLY
compiles and runs, but
SELECT 1 FROM sysibm.sysdummy1 WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY)
will not compile.
TOP N
and FETCH FIRST N
are not the same. You can only use FETCH FIRST
once per query, whereas TOP N
can be used in any sub-select.
You can use a window function in a sub-query in order to simulate 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
This will return exactly 99 rows. I tried that in iSeries 7 and it worked.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With