我有一个查询,它返回以下示例数据: -
SELECT * FROM VW_STATUSNEW
ID STATUS_1 STATUS_2
1 FAIL 1
2 FAIL NULL
3 1 NULL
4 NULL 2
5 2 2
6 2 FAIL
7 NULL NULL
Oracle是否可以返回STATUS_1和STATUS_2不匹配的所有行。因此,使用上面的数据,所需的结果是: -
ID STATUS_1 STATUS_2
1 FAIL 1
2 FAIL NULL
3 1 NULL
4 NULL 2
6 2 FAIL
问题似乎是将单词FAIL与一个数字进行比较,并为NULLs做准备。
答案 0 :(得分:2)
这两种状态具有相同的类型(两列中都有字符串)。所以比较不应该是一个问题。这是一种方式:
SELECT *
FROM VW_STATUSNEW
WHERE (status1 <> status2) OR
(not (status1 is null and status2 is null)) ;
答案 1 :(得分:1)
SELECT *
FROM VW_STATUSNEW
WHERE STATUS_1 <> STATUS_2
OR (STATUS_1 IS NULL AND STATUS_2 IS NOT NULL)
OR (STATUS_1 IS NOT NULL AND STATUS_2 IS NULL);
或强>
SELECT *
FROM VW_STATUSNEW
WHERE STATUS_1 <> STATUS_2
OR NOT (STATUS_1 IS NULL AND STATUS_2 IS NULL)
<强>输出强>
ID STATUS_1 STATUS_2
1 FAIL 1
2 FAIL (null)
3 1 (null)
4 (null) 2
6 2 FAIL
<强>演示强>
答案 2 :(得分:1)
这是DECODE
仍然有用的少数情况之一,因为根据解码,NULL等于null。
select *
from VW_STATUSNEW
where decode(status_1, status_2, 1, 0) = 0;
答案 3 :(得分:0)
试试这个:
SELECT
ID
,STATUS_1
,STATUS_2
FROM VW_STATUSNEW
where NVL(STATUS_1, '0') != NVL(STATUS_2, '0')
答案 4 :(得分:0)
Pentaho Reporting Output Example.ktr
返回
with testtab as (select 'Fail' "STAT1", '1' "STAT2" from dual
union all select 'Fail', null from dual
union all select '1', null from dual
union all select null, '2' from dual
union all select '2', '2' from dual
union all select '2', 'FAIL' from dual
union all select null, null from dual)
select * from testtab
where nvl(STAT1,-1) != nvl(STAT2,-1);
您的示例中的Stat1 = status_1。
如果Stat1 Stat2
Fail 1
Fail null
1 null
null 2
2 FAIL
为空, nvl(value, altValue)
会返回altValue