从sql server表中查找特定值的列名

时间:2015-01-23 18:07:46

标签: sql sql-server

-------------------------------------
|id | date1 | date2 | date3 | date4 |
-------------------------------------
12  | 0902  | 0117  |'space'|'space'|
23  | 0407  | 0214  | 0518  |'space'| 
31  | 0608  |'space'|'space'|'space'|

如何查找第一个列名称'每个id都没有日期?

例如:对于id = 31,我需要在查询结果中使用列名date2

提前致谢!

2 个答案:

答案 0 :(得分:1)

您可以使用CASE声明(如果您有''而不是NULL,则应将IS NULL替换为= ''):

SELECT id
     , CASE WHEN date1 IS NULL THEN 'date1'
            WHEN date2 IS NULL THEN 'date2'
            WHEN date3 IS NULL THEN 'date3'
            WHEN date4 IS NULL THEN 'date4'
       END AS first_null_date
FROM tbl

答案 1 :(得分:1)

你可以使用CASE,如果你想将空间视为NULL,你还需要使用ISNULL()函数

SELECT ID,
       CASE 
         WHEN ISNULL(date1, '') = ''
             THEN 'date1'
         WHEN ISNULL(date2, '') = ''
             THEN 'date2'
         WHEN ISNULL(date3, '') = ''
             THEN 'date3'
         WHEN ISNULL(date4, '') = ''
             THEN 'date4'          
       END [COLUMN_NAME]
FROM TableName