摘要:SQL - 使用 COALESCE
COALESCE 常會拿來與 ISNULL 作為比較,但小弟覺得似乎不太相同,ISNULL 是判斷欄位的值,若為 NULL 的時,可以將 NULL 轉變成自己所要顯示的值,而 COALESCE 就像是 CASE WHEN,以下就來實作看看...
資料:
Code:
--建立一個資料表名為 商品價格表
CREATE TABLE [dbo].[商品價格表](
[商品ID] [nvarchar](10) NOT NULL,
[商品名稱] [nvarchar](50) NOT NULL,
[價格一] [int] NULL,
[價格二] [int] NULL,
[價格三] [int] NULL,
CONSTRAINT [PK_商品價格表] PRIMARY KEY CLUSTERED
(
[商品ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
--新增六筆資料
Insert into dbo.商品價格表 Values('A0000001', '男用皮包', 10000, NULL, NULL)
Insert into dbo.商品價格表 Values('A0000002', '女用皮包', 15000, NULL, NULL)
Insert into dbo.商品價格表 Values('A0000003', '陶瓷茶具組', NULL, 5000, NULL)
Insert into dbo.商品價格表 Values('A0000004', '高級酒杯組', NULL, 8000, NULL)
Insert into dbo.商品價格表 Values('A0000005', '咖啡壺', NULL, NULL, 1999)
Insert into dbo.商品價格表 Values('A0000006', '高級炒菜鍋', NULL, NULL, 12000)
--使用 COALESCE 產生資料
Select 商品ID, 商品名稱, COALESCE(價格一 * 0.7, 價格二 * 0.8, 價格三 * 0.9)
From dbo.商品價格表
--使用 CASE WHEN 來與 COALESCE 來做比較
Select 商品ID, 商品名稱,
CASE
WHEN ISNULL(價格一, '') <> 0 THEN 價格一 * 0.7
WHEN ISNULL(價格二, '') <> 0 THEN 價格二 * 0.8
WHEN ISNULL(價格三, '') <> 0 THEN 價格三 * 0.9
END
From dbo.商品價格表
結果:
參考:
COALESCE (Transact-SQL)