Oracle从具有多行和多列的DUAL中选择

b4wnujal  于 2022-10-04  发布在  Oracle
关注(0)|答案(2)|浏览(249)

我需要加入从我的程序中动态检索的数字的动态列表。行数不是固定的,使用的数字也不是固定的。

我找不到比以下方法更好的方法来实现这一点(就我的目的而言,临时表没有帮助):

select 111 as col1, 322 as col2 from dual
union all
select 3 as col1, 14 as col2 from dual
union all
select 56 as col1, 676 as col2 from dual;

有没有更好的方法来做这件事?我看到有一个CONNECT BY语句可以返回多行,但我没有看到一种方法来返回多行和多列。

jhdbpxl9

jhdbpxl91#

您可以使用解码并按级别连接:

select decode(rownum, 1, 111, 2, 3, 3, 56) as col1,
       decode(rownum, 1, 322, 2, 14, 3, 676) as col2
  from dual
connect by level <= 3;
6yjfywim

6yjfywim2#

您可以在这里使用CONNECT BY,但需要做一些数学运算:

SELECT Level * 2 - 1 AS col1, Level * 2 AS col2
FROM DUAL
CONNECT BY LEVEL <= 3;

这将为您提供三行的示例。调整LEVEL <= ...值以获得更多行。

更新2022:我看到OP在我回答问题的第二天编辑了问题,使其无效。

B.Khan一年后的回答更有针对性,尽管老实说我更喜欢CASE而不是DECODE--DECODE更紧凑,但IMO CASE更具可读性。在这里,我也更喜欢LEVEL而不是ROWNUM,因为ROWNUM并不总是以人们预期的方式工作。

SELECT
  CASE LEVEL
    WHEN 1 THEN 111
    WHEN 2 THEN 3
    WHEN 3 THEN 56
    END as col1,
  CASE LEVEL
    WHEN 1 THEN 322
    WHEN 2 THEN 14
    WHEN 3 THEN 676
    END as col2
FROM DUAL
CONNECT BY LEVEL <= 3;

相关问题