SQL 查询的结果某个字段是Null,用默认的值代替

时间:2021-12-20 13:08:05
如果查询的结果某个字段是Null,用默认的值代替。


1、)Sql server中:


select   case   when   字段名1   is   null   
                              then   替代值   
                           else   字段名1     
           end   +   
           case   when   字段名2   is   null   
                              then   替代值   
                          else   字段名2     
            end   as   显示字段名     
          from   表名
注:字段名是表中的列。
经常如果某个字段是“”时(空格),也可以用某个字段代替,例如customer表:
执行下列语句:
select  custid,shipline1,shipline2, name ,          
 case when   Status =' ' then '0' else Status end as Status  from  customer
  得到(如果status为’ ’,则让它视图显示“0”):
执行进一步更复杂的要求,如果name为’my’显示‘a’,为’yo’显示‘b’,其他显示’c’,sql语句如下:
 
select
 custid,shipline1,shipline2,  
 case   when   name='my'  then   'a'    
        when   name='yo'   then   'b'
        else 'c'   end  as name ,          
 case when   Status ='' then '0' else Status end
  as Status  from  customer order by custid asc
注:(附建表语句)
create table AppDta.dbo.customer(
            custid int Not Null check(custid>0),
            name char(30) Not Null check(name<>''),
           shipline1 varchar(100) Not Null Default '',
           shipline2 varchar(100) Not Null Default '',
           Status  char(1) Not Null Default '',
           CreditLimit Money Not Null check((CreditLimit Is NUll) or (CreditLimit>=0)));
 
2、)oracle中:


下面用一个常见的数据显示来说明decode函数的用法。就是成绩单的显示。我想做开发的人员都遇到过这个,而且在大学期间也是常常接触成绩单,显示的是:姓名、语文、数学等。 实现脚本如下(cjd.sql):
--建表
create table stud
(
 sid  varchar2(10),
 kcbm  varchar2(10),
 cj  int
);
--插入测试数据
insert into stud values(''''1'''',''''语文'''',80);
insert into stud values(''''2'''',''''数学'''',90);
insert into stud values(''''3'''',''''英语'''',100);
commit;
--创建视图,decode用法
create or replace view cjd as
 select sid,
 decode(kcbm,''''语文'''',cj,0) 语文,
 decode(kcbm,''''数学'''',cj,0) 数学,
 decode(kcbm,''''英语'''',cj,0) 英语
 from stud
 order by sid;
--显示数据
select * from cjd;
执行过程如下:
SQL> create table stud(sid varchar2(10),
  2  kcbm varchar2(10),
  3  cj int);
表已创建。
WS$R=业@网VgoX育Yb网IlU
SQL> insert into stud values(''''1'''',''''语文'''',80);
已创建 1 行。
SQL> insert into stud values(''''2'''',''''数学'''',90);
已创建 1 行。
SQL> insert into stud values(''''3'''',''''英语'''',100);
已创建 1 行。
SQL> commit;
提交完成。
SQL> create or replace view cjd as
  2  select sid,
  3  decode(kcbm,''''语文'''',cj,0) 语文,
  4  decode(kcbm,''''数学'''',cj,0) 数学,
  5  decode(kcbm,''''英语'''',cj,0) 英语
  6  from stud
  7  order by sid;
视图已建立。
SQL> select * from cjd;
SID              语文       数学       英语                                     
---------- ---------- ---------- ----------                                     
1                  80          0          0                                     
2                   0         90          0                                     
3                   0          0        100