2015-08-28 121 views
0

第一行,我有以下查詢:參數取查詢

WITH lftno(counterrow) AS (
    VALUES(select rownos 
      from test.table1 
      where year='2020' and usage='1') 
) 
UPDATE test.deltable 
    SET year=concat('31.12.','2012') 
WHERE ID IN (
    select res.id 
    from (
     select res.id 
     from (
      SELECT ROW_NUMBER() OVER (ORDER BY year ASC) AS delyear 
        , ID, year 
      from test.deltable 
     ) res 
     where year(res.year)='2012' 
     fetch first integer(counterrow) rows only 
    ) 

的與選擇的結果是10,所以我想取第一行使用10作爲值的行趕上。

最終查詢時間更長,但要顯示問題,這很容易讀取。

我試圖

'fetch first ' || integer(counterrow) || ' rows only' 

或where子句

AND row_number() over() <= counterrow 

的一部分,但也不能工作。

問題是,我不能訴諸於他們的一部分。我只需要對抗者給出的線路。

任何想法?

感謝您的幫助。

+0

作爲一個側面說明VALUES子句是聯合國有必要,可以更換'值(從test.table1 選擇rownos 其中year =「2020」稱和用法= '1')''''select'rownos from test.table1 where year ='2020'and usage ='1'' – Lennart

回答

0

您不能在WHERE子句中使用row_number()。而且,FETCH子句需要常量。但是,您可以在子查詢中使用row_number(),並在外部查詢中使用結果。如果我理解正確的話,你想:

WITH lftno(counterrow) AS (
     VALUES(select rownos from test.table1 where year = '2020' and usage = '1') 
    ) 
select res.id 
from (SELECT ROW_NUMBER() OVER (ORDER BY year ASC) AS delyear, 
      ID, year 
     from test.deltable 
    ) res 
where year(res.year) = '2012' and 
     delyear <= counterrow; 
+0

我在問題中添加了更多關於查詢的信息,所以您可以看到這不是一個選項。 – Thevagabond

+0

@Thevagabond。 。 。沒有像'lftno'命令那樣的事情。 SQL表,子查詢,CTE和結果集都表示*無序*集。只有一個單獨的列指定了排序。 –