有这样一个需求,比如一个表有col1,col2,col3字段,
但是这几个字段不一定都有值,即可以为NULL,使用
select语句实现,如下数据情况时:
col1,col2,col3
"abc","def",NULL
NULL,"abc",NULL
"abc",NULL,NULL
返回
1,1,0
0,1,0
1,0,0
请问,这个sql语句怎么写?谢谢!

解决方案 »

  1.   

    已经解决了!
    select if(isnull(col),0,1) as col ....
      

  2.   

    create table tt(
    col1 char(3),
    col2 char(3),
    col3 char(3))
    engine myisam default charset utf8;
    insert into tt
    values
    ("abc","def",NULL),
    (NULL,"abc",NULL),
    ("abc",NULL,NULL);
    select 
    (case when col1 is null then 0 else 1 end)as col1,
    (case when col2 is null then 0 else 1 end)as col2,
    (case when col3 is null then 0 else 1 end)as col3
    from tt;
    query result(3 records)
    col1 col2 col3 
    1 1 0 
    0 1 0 
    1 0 0 
      

  3.   

    就当作是散分贴吧,欢迎大家提供各种解决方法。to yueliangdao:case when ...
    是一个语法还是语法组合?
      

  4.   

    case when 就和
    if then
    结构一样的。你看看手册就很明白了。
      

  5.   

    也和程序中的switch case 结构类似
    有两种形式mysql> set @t = 4;
    Query OK, 0 rows affected (0.00 sec)mysql> select case @t when 1 then 1 else 3 end;
    +----------------------------------+
    | case @t when 1 then 1 else 3 end |
    +----------------------------------+
    |                                3 |
    +----------------------------------+
    1 row in set (0.00 sec)mysql> select case when @t=1 then 1 else 3 end;
    +----------------------------------+
    | case when @t=1 then 1 else 3 end |
    +----------------------------------+
    |                                3 |
    +----------------------------------+
    1 row in set (0.00 sec)