我在一个循环中运行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<此处小提琴>此处小提琴>