Oracle SQL select 两个不同的 select 语句结果的最大值

Oracle SQL select greatest value of the result of two different select statements

我是 运行 select 循环中的语句,使用游标从不同的表中收集数据; 快速(不工作)示例;

select DISTINCT(ordernr) from orders 

INSERT INTO newtable (select Crs.ordernr as ordernr, value1 as value from table2 where table2.ordernr = Crs.ordernr );
INSERT INTO newtable (select Crs.ordernr as ordernr, value2 as value from table3 where tabel3.ordernr=Crs.ordernr ;

)
LOOP
END LOOP;
END;

我想要的只是一个插入语句,它只插入两个 select 语句的最大值。 我尝试在我的循环中使用最强大的功能,但我 运行 卡住了。 value1 和 value2

的两种数据类型相同
insert into newtable(select crs.ordernr as ordernr, greatest
(
select value1 as value from table1 where condition=1, select value2 as value from table2 where condition=1)
)
);

是否可以使用 select 案例或其他方式根据条件 return 只有一个值?例如value1或value2的最大值?

您可以使用 greatest 函数并为其提供子查询,但是 - 遵循语法,即将每个子查询(select 语句)括在自己的括号中。

像这样:

SQL> select greatest (  (select max(sal) from emp where job = 'CLERK'),
  2                     (select max(sal) from emp where job = 'ANALYST')
  3                  ) greatest_salary
  4  from dual;

GREATEST_SALARY
---------------
           3450

SQL>

我不知道这是什么:

insert into newtable(select crs.ordernr as ordernr
                     -----------------------------

应该做的; crs 是什么? from 子句在哪里?

从 Oracle 12 开始,您可以使用:

INSERT INTO newtable (ordernr, value)
SELECT *
FROM   (
  SELECT Crs.ordernr as ordernr,
         value1      as value
  FROM   table2
  WHERE  table2.ordernr = Crs.ordernr
UNION ALL
  SELECT Crs.ordernr,
         value2
  FROM   table3
  WHERE  table3.ordernr=Crs.ordernr
)
ORDER BY value DESC
FETCH FIRST ROW ONLY;

这意味着如果您扩展查询以提取更多列并且您想要一列的最高值和其他列的相应值,那么这些值将全部来自具有最高值的那一行。

db<>fiddle here