我想从 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
答案 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)
使用CASE
或DECODE
声明,如下所示:
测试数据
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
上述带有测试数据的查询提供了问题中提出的预期结果!