Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Oracle SQL从2个值中获取最小值_Sql_Oracle - Fatal编程技术网

如何使用Oracle SQL从2个值中获取最小值

如何使用Oracle SQL从2个值中获取最小值,sql,oracle,Sql,Oracle,我有两张桌子TAB1和TAB2。两者都有3列,每个段、级别和值。以下是两个表中的数据: TAB1 SEGMENT LEVEL VALUE ---------------------------------- SEG1 1 1000 SEG1 2 900 SEG1 3 800 SEG2 1 4000 SEG2

我有两张桌子TAB1和TAB2。两者都有3列,每个段、级别和值。以下是两个表中的数据:

TAB1

SEGMENT       LEVEL        VALUE
----------------------------------
SEG1              1        1000
SEG1              2         900
SEG1              3         800
SEG2              1        4000
SEG2              2        3000
SEG2              3        1000
SEG3              1        5000
SEG3              2        3500
SEG3              3        2200

TAB2

SEGMENT       LEVEL        VALUE
----------------------------------
SEG1              1        2000
SEG1              2        1800
SEG1              3        1200
SEG2              1        3000
SEG2              3        2500
SEG4              1       10000
SEG4              2        8100
SEG4              3        2900
因此,正如您所看到的,我在两个表和一些段中总共有四个段SEG1、SEG2、SEG3和SEG4,两个表中都没有风险等级。我希望两个表中的最小值用于段和级别列的组合。查询的输出应该如下所示:

SEGMENT       LEVEL        VALUE
----------------------------------
SEG1              1        1000
SEG1              2         900
SEG1              3         800
SEG2              1        3000
SEG2              2        3000
SEG2              3        1000
SEG3              1        5000
SEG3              2        3500
SEG3              3        2200
SEG4              1       10000
SEG4              2        8100
SEG4              3        2900
我尝试通过完全外部连接实现它,但输出不是我所期望的:

SELECT t1.SEGMENT, t1.LEVEL, t2.SEGMENT, t2.LEVEL, LEAST(t1.VALUE, t2.VALUE)
FROM TAB1 t1
FULL OUTER JOIN TAB2 t2
ON t1.SEGMENT = t2.SEGMENT
AND t1.LEVEL = t2.LEVEL; 
非常感谢您的帮助。数据库是Oracle。

试试这个

select  segment,level,min(value) value from (
select segment,level,value from tab1
UNION ALL
select segment,level,value from tab2
) d group by  segment,level

我要注意的是,
级别
是oracle中的保留行,您不能使用它们