如何在Oracle中有条件地选择列?

时间:2014-06-05 12:05:33

标签: sql oracle

我想从 Oracle 中选择数据。但是我有一个专栏 - CHILD_IDN - 决定哪一列适合我。如果列有idn,那么我需要从表中选择CHILD,否则我应该选择PARENT。 MSSQL允许简单的CASE语句工作。 但是甲骨文怎么样?是否有针对此的Oracle vs MSSQL兼容查询?我认为它的非标准化数据因此需要建议。

例如

TableA

1    PARENT  CHILD_IDN CHILD
2    Okay 
3    Cool    1         PickMe1 
4    Fine
5    Test
6    Bar     2         Pickme2
7    Hello   


Now the result expected is 

Okay 
PickMe1
Fine
Test
Pickme2
Hellow

3 个答案:

答案 0 :(得分:3)

您也可以在Oracle中使用CASE语句。等,

SELECT CASE WHEN child_idn IS NOT NULL THEN child 
       ELSE parent 
       END
FROM   tableA;

答案 1 :(得分:2)

您可以使用case

执行此操作
select (case when child_idn = 2 then child else parent
        end)
from table t;

这是标准SQL,应该适用于任一数据库。

注意:这假定“空白”值为NULL,并使用条件将在NULL值上失败的事实。如果您愿意,也可以明确:

select (case when child_idn = 1 then parent
             when child_idn = 2 then child
             else parent
        end)

答案 2 :(得分:1)

使用CASEDECODE声明,如下所示:

测试数据

WITH TABLEA AS
(
SELECT 1 SLNO, 'OKAY' PARENT, '' CHILD_ID, '' CHILD FROM DUAL
UNION 
SELECT 2 SLNO, 'COOL' PARENT, '1' CHILD_ID, 'PICKME1' CHILD FROM DUAL
UNION 
SELECT 3 SLNO, 'FINE' PARENT, '' CHILD_ID, '' CHILD FROM DUAL
UNION 
SELECT 4 SLNO, 'TEST' PARENT, '' CHILD_ID, '' CHILD FROM DUAL
UNION 
SELECT 6 SLNO, 'BAR' PARENT, '2' CHILD_ID, 'PICKME2' CHILD FROM DUAL
UNION 
SELECT 7 SLNO, 'HELLO' PARENT, '' CHILD_ID, '' CHILD FROM DUAL
)

备选方案1:,带解码

SELECT DECODE(CHILD_ID,'',PARENT,CHILD) CHILD
FROM TABLEA

备选方案2 :使用案例

SELECT (CASE WHEN CHILD_ID IS NOT NULL THEN child 
       ELSE parent 
       END) value
FROM TABLEA

上述带有测试数据的查询提供了问题中提出的预期结果!