1. 程式人生 > >SQL 查詢的結果某個欄位是Null,用預設的值代替

SQL 查詢的結果某個欄位是Null,用預設的值代替

如果查詢的結果某個欄位是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