如何在DB2数据库的where子句中使用ROW_NUMBER().我在下面试过但它不起作用:
SELECT * FROM CSPAPP.LOCATIONS
WHERE (ROW_NUMBER() OVER(ORDER BY LOCATION)) BETWEEN 100 AND 200
Run Code Online (Sandbox Code Playgroud)
它给出了错误:无效使用聚合函数或OLAP函数.
我也尝试了以下方式:
SELECT (ROW_NUMBER() OVER(ORDER BY LOCATION)) AS RN ,* FROM CSPAPP.LOCATIONS
WHERE RN < 200
SELECT (ROW_NUMBER() OVER(ORDER BY LOCATION)) AS RN ,LOCATION FROM CSPAPP.LOCATIONS
WHERE RN < 200
Run Code Online (Sandbox Code Playgroud)
您无法在定义它的同一级别上引用别名.您需要将其包装到派生表中:
SELECT location
FROM (
SELECT row_number() over(order by location) as rn,
location
FROM cspapp.locations
)
WHERE rn < 200
Run Code Online (Sandbox Code Playgroud)
在基于iSeries DB2中的行号进行选择时,我会使用类似的方法:
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY location) as RRN, *
FROM CSPAPP.LOCATIONS
)
WHERE RRN between 100 and 200
Run Code Online (Sandbox Code Playgroud)
如果仅对1字段感兴趣,则可以为select分配一个名称并引用这些字段:
SELECT DATA.location
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY location) as RRN, *
FROM CSPAPP.LOCATIONS
) as DATA
WHERE DATA.RRN between 100 and 200
Run Code Online (Sandbox Code Playgroud)