Sql DB2 rownum等价物

Sql DB2 rownum等价物,sql,db2,db2-luw,Sql,Db2,Db2 Luw,我在Oracle中有下面的查询,我想在DB2中复制它,DB2使用随机函数和rownum Oracle查询: SELECT * FROM ( SELECT * FROM db2admin.QUESTION_BANK WHERE type='PROCESS' ORDER BY dbms_random.value ) WHERE rownum <=? 我得到了随机函数的替代值,但rownum没有。下面是DB2中的查询 SELECT * FROM ( S

我在Oracle中有下面的查询,我想在DB2中复制它,DB2使用随机函数和rownum

Oracle查询:

SELECT * 
FROM  (
   SELECT * 
   FROM db2admin.QUESTION_BANK 
   WHERE type='PROCESS' 
   ORDER BY dbms_random.value
) WHERE rownum <=?
我得到了随机函数的替代值,但rownum没有。下面是DB2中的查询

SELECT * 
FROM  (
  SELECT * 
  FROM db2admin.QUESTION_BANK 
  WHERE type='PROCESS' ORDER BY RAND
) WHERE rownum <= ?
rownum的值通过PreparedStatement传递。

当您在Oracle兼容模式下工作时,DB2具有。要仅启用此功能,请使用以下命令:

db2set DB2_COMPATIBILITY_VECTOR=01
db2stop
db2start
SELECT * 
FROM db2admin.QUESTION_BANK 
WHERE type = 'PROCESS' 
ORDER BY RAND() 
fetch first ? rows only;
要获得所有Oracle功能,请按如下方式启用:

db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start
上的文档详细介绍了备选方案,如 行号结束。

当您在Oracle兼容模式下工作时,DB2有。要仅启用此功能,请使用以下命令:

db2set DB2_COMPATIBILITY_VECTOR=01
db2stop
db2start
SELECT * 
FROM db2admin.QUESTION_BANK 
WHERE type = 'PROCESS' 
ORDER BY RAND() 
fetch first ? rows only;
要获得所有Oracle功能,请按如下方式启用:

db2set DB2_COMPATIBILITY_VECTOR=ORA
db2stop
db2start
上的文档详细介绍了备选方案,如 排号结束。

试试:

SELECT * 
FROM  (
       SELECT f1.*, rownumber() over(ORDER BY f1.randm ) as rownum
       from ( 
            select f0.*, rand() as randm FROM db2admin.QUESTION_BANK f0
             WHERE f0.type='PROCESS'
            ) f1
      ) f2 
WHERE f2.rownum <= ?
试试看:

SELECT * 
FROM  (
       SELECT f1.*, rownumber() over(ORDER BY f1.randm ) as rownum
       from ( 
            select f0.*, rand() as randm FROM db2admin.QUESTION_BANK f0
             WHERE f0.type='PROCESS'
            ) f1
      ) f2 
WHERE f2.rownum <= ?
您可以使用以下选项:

db2set DB2_COMPATIBILITY_VECTOR=01
db2stop
db2start
SELECT * 
FROM db2admin.QUESTION_BANK 
WHERE type = 'PROCESS' 
ORDER BY RAND() 
fetch first ? rows only;
您可以使用以下选项:

db2set DB2_COMPATIBILITY_VECTOR=01
db2stop
db2start
SELECT * 
FROM db2admin.QUESTION_BANK 
WHERE type = 'PROCESS' 
ORDER BY RAND() 
fetch first ? rows only;

使用ROW_NUMBER分析函数作为rownum的等效函数

SELECT * 
FROM  (
   SELECT db2admin.* 
   , ROW_NUMBER() OVER () rownum 
   FROM db2admin.QUESTION_BANK 
   WHERE type='PROCESS' 
   ORDER BY dbms_random.value
) WHERE rownum <=?

使用ROW_NUMBER分析函数作为rownum的等效函数

SELECT * 
FROM  (
   SELECT db2admin.* 
   , ROW_NUMBER() OVER () rownum 
   FROM db2admin.QUESTION_BANK 
   WHERE type='PROCESS' 
   ORDER BY dbms_random.value
) WHERE rownum <=?

先拿。。仅行或行编号,但带有行编号的随机数可以一起使用吗?。你能举一个例子吗?randI得到这个错误例程或表达式RAND的使用是无效的,因为它不是确定性的,或者有一个外部动作。。SQLCODE=-583,SQLSTATE=42845,DRIVER=4.18.60哪个DB2版本?先获取。。仅行或行编号,但带有行编号的随机数可以一起使用吗?。你能举一个例子吗?randI得到这个错误例程或表达式RAND的使用是无效的,因为它不是确定性的,或者有一个外部动作。。SQLCODE=-583,SQLSTATE=42845,DRIVER=4.18.60哪个版本的DB2?DB2_COMPATIBILITY_VECTOR在使用它的上下文中无效。。SQLCODE=-206,SQLSTATE=42703,DRIVER=4.18.60DB2_COMPATIBILITY_VECTOR在使用它的上下文中无效。。SQLCODE=-206,SQLSTATE=42703,DRIVER=4.18.60rand是一个函数,不是一个完美的列。这正是所需的任务。rand是一个函数,而不是一个完美的函数。这正是所需要的任务。是的,这非常有效。但是这里有一个问题,这不是只选择第一个吗?每次说20个问题,然后随机化吗?@SouravMehra:不,排序规则发生在应用第一个获取之前,如果你想看看一行的样子,就不必了。只有在提取数据样本时才使用它。是的,这非常有效。但是这里有一个问题,这不是只选择第一个吗?每次说20个问题,然后随机化吗?@SouravMehra:不,排序规则发生在应用第一个获取之前,如果你想看看一行的样子,就不必了。只有在提取数据样本时才使用它。使用前面注释的fetch更容易,不需要在空分区上使用分析函数clauseeasier使用前面注释的fetch,不需要在空分区子句上使用分析函数