2012-08-28

以COALESCE()取代ISNULL()

在德瑞克大的Blog看到一篇認識 COALESCE() 函數文章,
特別記錄一下,供以後自己參考!

一般我們使用ISNULL()會傳入兩個參數,
當第一個參數為NULL時,則會回傳第二個參數的值,
COALESCE()不同於ISNULL(),在於可以傳入多個參數,
一直到第一個非NULL值的參數出現才回傳,
利用這個特性,也可以簡化當我們使用ISNULL()CASE WHEN的搭配!!


--抓取一週內第一天賣出去的金額
--建立範例暫存表
IF (select OBJECT_ID('tempdb..#Sample')) IS NOT NULL DROP TABLE #Sample
CREATE TABLE #Sample (Pname varchar(10),
      Mon INT,
      Tue INT,
      Wed INT,
      Thu INT,
      Fri INT)
--新增測試資料      
INSERT INTo #Sample (Pname,Mon,Thu) VALUES ('pizza',125,200)
INSERT INTo #Sample (Pname,Wed) VALUES ('cookie',50)
INSERT INTo #Sample (Pname,Tue,Thu,Fri) VALUES ('wine',300,250,700)
--ISNULL、CASE WHEN
select Pname,SALE_1st=(CASE WHEN ISNULL(Mon,0)>0 THEN Mon
      WHEN ISNULL(Tue,0)>0 THEN Tue
      WHEN ISNULL(Wed,0)>0 THEN Wed
      WHEN ISNULL(Thu,0)>0 THEN Thu
      WHEN ISNULL(Fri,0)>0 THEN Fri ELSE 0 END)
from #Sample

--COALESCE
select Pname,SALE_1st=COALESCE(Mon,Tue,Wed,Thu,Fri)
from #Sample
--執行結果
Pname      SALE_1st
---------- -----------
pizza      125
cookie     50
wine       300
參考自
張貼留言