我在Oracle数据库中有以下表格:
Table - TEST_TABLE1
FIELD_1 FIELD_2 FIELD_3 FIELD_4 FIELD_5
-------------------------------------------------
NA 123 NA NA NA
我必须检查从最后一列到第一列没有值'NA'的列名称 即在这种情况下我的输出将是
FIELD_2
-------
123
感谢任何帮助。
答案 0 :(得分:1)
数据库中通常的“NA”(即不可用)表达式表示为NULL
。
您可以考虑更新您的表格,如
update TEST_TABLE1 set
FIELD_1 = NULL
WHERE FIELD_1 = 'NA';
无论如何,为了你的选择我会提出这个:
select COALESCE(NULLIF(FIELD_1, 'NA'), NULLIF(FIELD_2, 'NA'), NULLIF(FIELD_3, 'NA'), NULLIF(FIELD_4, 'NA'), NULLIF(FIELD_5, 'NA'))
from TEST_TABLE1;
如果您使用NULL
更新表格,则查询会缩短为
select COALESCE(FIELD_1, FIELD_2, FIELD_3, FIELD_4, FIELD_5)
from TEST_TABLE1;
答案 1 :(得分:1)
尝试使用decode
。 '
正如@ mathguy所说,列标题(FIELD_2
)无法以这种方式捕获或显示。
Oracle 11g R2架构设置:
CREATE TABLE Table1
(FIELD_1 varchar2(4), FIELD_2 varchar2(4), FIELD_3 varchar2(4), FIELD_4 varchar2(4), FIELD_5 varchar2(4))
;
INSERT ALL
INTO Table1 (FIELD_1, FIELD_2, FIELD_3, FIELD_4, FIELD_5)
VALUES ('NA', '123', 'NA', 'NA', 'NA')
INTO Table1 (FIELD_1, FIELD_2, FIELD_3, FIELD_4, FIELD_5)
VALUES ('NA', '123', 'NA', '345', 'NA')
SELECT * FROM dual
;
查询1 :
select decode(FIELD_5, 'NA' ,
decode(FIELD_4, 'NA',
decode(FIELD_3, 'NA',
decode(FIELD_2, 'NA',
decode(FIELD_1, 'NA',
NULL,
FIELD_1),
FIELD_2),
FIELD_3)
,FIELD_4)
,FIELD_5) as val FROM Table1
<强> Results 强>:
| VAL |
|-----|
| 123 |
| 345 |