参数取查询

问题描述:

第一行,我有以下查询:参数取查询

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

您不能在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和结果集都表示*无序*集。只有一个单独的列指定了排序。 –