2017-01-24 4 views
0

私はDB2の初心者です。DB2 RowNumberの等価チェックインWhen節

私は、クエリの下にエラーコード SQLCODE = -120、SQLSTATE = -42903

に問題が会ったクエリを開発する際にそれがあります。

SELECT PHYSICAL_NAME||'' 
    FROM DEV_RESOURCE 
    WHERE RESOURCE_ID = '40069684046725203038312337393001' 
    AND ROWNUMBER() OVER() = 1 --This line is problem. 
    WITH UR 

ROWNUMBER()OVER()と1が問題だと思います。 修正方法?

oracle以外の問合せ(ROWNUMBER()OVER() - > ROWNUM)は作業です。

答えて

1

いくつかのオプションがあります。あなただけの単一の行を返すようにしたい場合は、あなたができる:

SELECT PHYSICAL_NAME||'' 
    FROM DEV_RESOURCE 
    WHERE RESOURCE_ID = '40069684046725203038312337393001' 
    FETCH FIRST ROW ONLY 
    WITH UR 

をDB2には、上記の構文を持っていますが、またMySQLの構文(LIMIT)を理解しています。もう1つのオプションは次のようにクエリを書き換えることです:

SELECT PHYSICAL_NAME||'' 
    FROM (select rownumber() over() as rn, DR.* from 
    DEV_RESOURCE DR 
    WHERE RESOURCE_ID = '40069684046725203038312337393001') 
    WHERE RN=1 
    WITH UR 

あなたが何をしたいかによって、さらに多くのオプションがあります。

1

where句にrownumberは使用できません。クエリの実行後にのみ使用できます。次のような方法を試してみてください。

select * from (
    SELECT PHYSICAL_NAME||'' as PHYSICAL_NAME, 
    ROWNUMBER() OVER() as rang 
    FROM DEV_RESOURCE 
    WHERE RESOURCE_ID = '40069684046725203038312337393001' 
) tmp 
where tmp.rang=1