SQL 查詢的結果某個欄位是Null,用預設的值代替
阿新 • • 發佈:2019-02-08
如果查詢的結果某個欄位是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
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