[MS SQL]SQL表达式COALESCE讲解

http://msdn.microsoft.com/en-us/library/ms190349.aspx

COALESCE相当与下面的CASE语句:

 CASE 
 WHEN (expression1 IS NOT NULL) THEN expression1
 WHEN (expression2 IS NOT NULL) THEN expression2
 ...
 ELSE expressionN
 END 

废话少说,还是举例说明。假设有一个Table,

image

现有数据如下:

image

输入SQL语句如下:

 SELECT TOP 1000 [EmployeeID]
 ,[Hourly_Wage]
 ,[Salary]
 ,[Commission]
 ,[Num_Sales]
 FROM [Wages]
 
 SELECT [EmployeeID]
 ,COALESCE([Hourly_Wage],0) as 'Hourly_Wage' 
 ,COALESCE([Salary],0) as 'Salary' 
 ,COALESCE([Commission],0) as Commission
 ,COALESCE([Num_Sales],0) as Num_Sales
 FROM [Wages]

我们可以看到结果如下:

image

可以看到这两个结果的差别就是NULL的地方都变成了0

这是最简单的COALESCE的用法。


下面我们开始复杂一点。

输入SQL语句如下:

 SELECT *,COALESCE(hourly_wage, salary,commission * num_sales) as total
 FROM dbo.wages

这段SQL语句的意思就是,

如果Hourly_Wage字段不为NULL,则Total字段=Hourly_Wage字段内容。

image

不再考虑salary,commission等字段内容了。

image

如果Hourly_Wage字段为NULL,则考察Salary字段,

       如果Salary字段不为NULL,则Total字段=Salary字段

image

       如果Salary字段也为NULL,则考察Commission字段,

                     若Commission字段不为NULL,则Total=Commission*Num_Sales

image

看到这里,大家要问了,那如果Commission或者Num_Sales的值也为NULL呢?或者所有字段的值都为NULL呢?那Total会是NULL还是0?

结果如下:

image

这时候,好动脑筋的同学们又要问了,我不想要NULL啊,可不可以NULL变成0呢?当然可以,这样写就行。

 SELECT *,COALESCE(COALESCE(hourly_wage, salary, commission * num_sales),0) as total
 FROM dbo.wages

或者用ISNULL函数,

 SELECT *,isnull(COALESCE(hourly_wage, salary, commission * num_sales),0) as total
 FROM dbo.wages

结果都一样,如下:

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值