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



我在一个循环中运行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 case或其他方式根据条件只返回一个值?例如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<此处小提琴>

最新更新