如何运行SQL查询从三列中的一列中提取数据?

300*_*300 1 sql sql-server

我在SQL Server 2012中有一个数据库表"table_name1",我使用的是SQL Server Management Studio版本10.

表中的数据如下所示:

colpkey col1    col2    col3
1234    AB1234  AB1234  
1265    BS5379  BS5379  BS5379
2323    WE7865  WE7865  WE7865
3267            WB7690  WB7690
6543    NULL    DH6583  
8798                    NULL
9403    BF6543          NULL
9856    BH7548  BH7548  BH7548
Run Code Online (Sandbox Code Playgroud)

我用来创建此表样本表的查询:

create table table_name1 (
  colpkey bigint primary key,
  col1 varchar(10) ,
  col2 varchar(10),
  col3 varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

我想写一个查询,所以它应该拉两列,"colpkey"和"col"."col"应该具有"col1"的值.如果"col1"为NULL或空白,则应从"col2"获取值.如果"col2"为NULL或空白,则应从"col3"获取值.如果所有"col1","col2"和"col3"都是空白或NULL,则放入"col"的值应为空('').

因此,对于给定的示例"table_name1",查询应该提取如下数据:

colpkey col
1234    AB1234
1265    BS5379
2323    WE7865
3267    WB7690
6543    DH6583
8798    
9403    BF6543
9856    BH7548
Run Code Online (Sandbox Code Playgroud)

如何编写查询来执行此操作?我试图使用CASE并提出以下查询:

select colpkey, 
Case WHEN (col1 != null and col1!= '') then col1
     ELSE 
     (CASE WHEN (col2 != null and col2!= '') then col2
     ELSE
     (CASE WHEN (col3 != null and col3!= '') then col3
     ELSE '' END) END) END as col
from table_name1;
Run Code Online (Sandbox Code Playgroud)

但它显示每行的空白,如:

colpkey col
1234    
1265    
2323    
3267    
6543    
8798    
9403    
9856    
Run Code Online (Sandbox Code Playgroud)

请告知我查询错误的地方?

Spe*_*ker 5

在SQL中,你不能比较NULL!=.你必须这样做IS NOT NULL.