如何获取Null表的列名?

时间:2013-02-12 10:35:42

标签: mysql sql sql-server oracle oracle10g

请考虑以下表格

--------------------------------
ID   | ColA    | ColB   | ColC
--------------------------------
1    | ABC     |        |
2    |         | XYZ    |
3    | PQR     |        |
4    | MNO     | PQR    |

我需要获得表格的第一个免费列,其中ID = 1.我该怎么做

例如:

如果ID = 1,则下一个免费栏为ColB 如果ID = 2,则下一个免费列为ColA 如果ID = 3,则下一个免费列为ColB 如果ID = 4,则下一个免费列为ColC

4 个答案:

答案 0 :(得分:1)

sql-server ; (如果你想考虑空字符串(''),那么也要使用nullif(colName,'') is null)

Select Id, case when colA is null then 'colA'
                when colB is null then 'colB'
                when colC is null then 'colC'
                ...
           end freeCol
from yourTable

答案 1 :(得分:1)

如果您想要列的名称,您可以执行以下操作:

SQL> select id, cola, colb, colc,
  2         coalesce(nvl2(cola, '', 'COLA'),
                     nvl2(colb, '', 'COLB'),
                     nvl2(colc, '', 'COLC')) first_free_col
  3    from tab;

        ID COL COL COL FIRST_FREE_COL
---------- --- --- --- --------------------------------
         1 ABC         COLB
         2     XYZ     COLA
         3 PQR         COLB
         4 MNO PQR     COLC

或案例

SQL> select id, cola, colb, colc,
  2         case when cola is null then 'COLA'
  3          when colb is null then 'COLB'
  4          when colc is null then 'COLC'
  5         end first_free_col
  6    from tab;

        ID COL COL COL FIRST_FREE_COL
---------- --- --- --- --------------------------------
         1 ABC         COLB
         2     XYZ     COLA
         3 PQR         COLB
         4 MNO PQR     COLC

答案 2 :(得分:1)

试试这个:

select case 
when ColA is not null then 'ColA'
when ColB is not null then 'ColB'
when ColC is not null then 'ColC'

End FirstCol

from test

SQL Fiddle

答案 3 :(得分:1)

你可以在mysql中使用以下查询

select ID,if(colA is null,'colA',(if(colB is null,'colB',
(if(colC is null,'colC','no column is null'))))) as Result  from your_table_name

对于您的示例表,如果您执行我的查询,您将获得以下结果

enter image description here