Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
Sql 如何在Oracle中基于其他列获取列的不同值_Sql_Oracle - Fatal编程技术网

Sql 如何在Oracle中基于其他列获取列的不同值

Sql 如何在Oracle中基于其他列获取列的不同值,sql,oracle,Sql,Oracle,我想从COL1中得到不同的值,它也是COL3值,但条件是如果COL1=COl2,那么它应该选择匹配的COL3值,否则如果它们不相同,则选择COL1值。我陷入了逻辑,任何帮助都将不胜感激 有关更多详细信息,请参见下图: select DISTINCT COL1, CASE WHEN COL1 = COL2 THEN COL3 END COL3 from TABLE1 WHERE COL1 IS NOT NULL; 使用相关子查询 select col1,col3 from TABLE1

我想从COL1中得到不同的值,它也是COL3值,但条件是如果COL1=COl2,那么它应该选择匹配的COL3值,否则如果它们不相同,则选择COL1值。我陷入了逻辑,任何帮助都将不胜感激

有关更多详细信息,请参见下图:

select  DISTINCT COL1, 
CASE WHEN COL1 = COL2 THEN COL3 END COL3 from TABLE1 
WHERE COL1 IS NOT NULL;

使用相关子查询

select col1,col3 
from TABLE1 a 
      where col2 in (select min(col2) from table1 b where a.col1=b.col1)

使用相关子查询

select col1,col3 
from TABLE1 a 
      where col2 in (select min(col2) from table1 b where a.col1=b.col1)

我认为您可以将表本身连接起来,然后使用连接条件将其过滤掉,然后在选择中确定是否存在COL2=COL1并选择适当的COL3:

SELECT DISTINCT a.COL1, CASE WHEN b.COL1 IS NULL THEN a.COL3 ELSE b.COL3 END as COL3
FROM TABLE1 a
LEFT JOIN TBALE2 b
on a.COL1 = b.COL2 
and a.COL1 = b.COL1

这样,表a上就有了所有数据,而表b上的数据只有当COL1与COL2匹配时才有。然后选择哪个COL3不为null,最好是表b中的一个。Oracle函数coalesce就是这样做的。

我认为您可以将表本身连接起来,然后使用连接条件将其过滤掉,然后在选择中确定是否存在COL2=COL1并选择适当的COL3:

SELECT DISTINCT a.COL1, CASE WHEN b.COL1 IS NULL THEN a.COL3 ELSE b.COL3 END as COL3
FROM TABLE1 a
LEFT JOIN TBALE2 b
on a.COL1 = b.COL2 
and a.COL1 = b.COL1
select distinct COL1, if(COL1 = COL2, COL3, COL1) as result
from table1
这样,表a上就有了所有数据,而表b上的数据只有当COL1与COL2匹配时才有。然后选择哪个COL3不为null,最好是表b中的一个。Oracle函数coalesce正是这样做的。

带有自连接:

select distinct COL1, if(COL1 = COL2, COL3, COL1) as result
from table1
select distinct
  t.col1,
  case 
    when tt.col1 is null then t.col3  
    else tt.col3 
  end col3  
from tablename t left join tablename tt
on tt.col1 = t.col1 and tt.col2 = t.col1
请参阅。
结果:

使用自联接:

select distinct
  t.col1,
  case 
    when tt.col1 is null then t.col3  
    else tt.col3 
  end col3  
from tablename t left join tablename tt
on tt.col1 = t.col1 and tt.col2 = t.col1
请参阅。
结果:


按分组以获得不同的COL1值

如果存在COL1=COL2行,则使用
COALESCE()
返回COL3值,否则返回COL1的最大COL3值。(如果更好的话,也可以使用
MIN()


分组以获得不同的COL1值

如果存在COL1=COL2行,则使用
COALESCE()
返回COL3值,否则返回COL1的最大COL3值。(如果更好的话,也可以使用
MIN()


这不包括没有匹配COL2值的情况……我认为将处理上面的示例数据,因为它有点差。如果您添加一些更复杂的行,将不起作用。这不包括没有匹配COL2值的情况…我认为将对上面的示例数据起作用,因为它有点差。如果添加一些更复杂的行,则将不起作用。添加行(15,16,'ABC')并调整结果(如果需要)。添加行(15,16,'ABC')并调整结果(如果需要)。