Oracle查找列名称和值

时间:2018-03-08 13:52:53

标签: sql oracle

我在Oracle数据库中有以下表格:

Table - TEST_TABLE1

FIELD_1    FIELD_2    FIELD_3   FIELD_4  FIELD_5
-------------------------------------------------
 NA         123        NA         NA      NA

我必须检查从最后一列到第一列没有值'NA'的列名称 即在这种情况下我的输出将是

FIELD_2
-------
123

感谢任何帮助。

2 个答案:

答案 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)无法以这种方式捕获或显示。

SQL Fiddle

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 |