使用SQL Server中COALESCE()函数的方法


COALESCE()函数可以接受一系列的值,如果列表中所有项都为空(null),那么只使用一个值。然后,它将返回第一个非空值。这一技巧描述了创造性使用SQL Server 中COALESCE()函数的两种方法。

这里有一个简单的例子:有一个Persons数据表,它有三个字段FirstName、MiddleName和LastName。表中包含以下值:

John A. MacDonald

Franklin D. Roosevelt

Madonna

Cher

Mary Weilage

如果你想用一个字符串列出他们的全名,下面给出了如何使用COALESCE()函数完成此功能:

SELECT FirstName + '' '' +COALESCE(MiddleName,'''')+ '' '' +COALESCE(LastName,'''')

如果你不想每个查询都这样写,列表A显示了如何将它转换成一个函数。这样当你需要使用这个脚本的时候(不管每个列的实际值是什么),可以直接调用该函数并传递三个字段参数。在下面的例子中,我传递给函数的参数是人名,但是你可以用字段名替代得到同样的结果:

SELECT dbo.WholeName(''James'',NULL,''Bond'')

UNION

SELECT dbo.WholeName(''Cher'',NULL,NULL)

UNION

SELECT dbo.WholeName(''John'',''F.'',''Kennedy'')

测试结果如下:

James Bond

Cher

John F. Kennedy

你可能会注意到我们的一个问题,在James Bond这个名字中有两个空格。通过修改@result这一行可以改正这个问题,如下所示:

SELECT @Result = LTRIM(@first + '' '' + COALESCE(@middle,'''') + '' '') + COALESCE(@last,'''')

下面是COALESCE()函数的另一个应用。在本例中,我们将显示一个支付给员工的工资单。问题是对于不同的员工工资标准是不同的(例如,有些员工是按小时支付,按工作量每周发一次工资或是按责任支付)。列表B中是创建一个样表的代码。下面是一些示例记录,每个是一种类型:

1 18.00 40 NULL NULL NULL NULL

2 NULL NULL 4.00 400 NULL NULL

3 NULL NULL NULL NULL 800.00 NULL

4 NULL NULL NULL NULL 500.00 600

用下面的代码在同一列中列出支付给员工的总额(不管它们的支付标准):

SELECT

EmployeeID,

COALESCE(HourlyWage * HoursPerWeek,0)+

COALESCE(AmountPerPiece * PiecesThisWeek,0)+

COALESCE(WeeklySalary + CommissionThisWeek,0)AS Payment

FROM [Coalesce_Demo].[PayDay]

结果如下:

EmployeeID Payment

1 720.00

2 1600.00

3 800.00

4 1100.00

你可能需要在应用程序中多处使用这一计算方法,虽然这种表示可以完成任务,但是看起来不是很美观。下面列出了如何使用一个单独的求和列来完成这项工作:

ALTERTABLE Coalesce_Demo.PayDay

ADD Payment AS

COALESCE(HourlyWage * HoursPerWeek,0)+

COALESCE(AmountPerPiece * PiecesThisWeek,0)+

COALESCE(WeeklySalary + CommissionThisWeek,0)

这样只要使用SELECT *就可以显示预先计算好的结果。

小结

本文介绍了使用COALESCE()函数一些特殊场合和特殊方式。就我的经验看来,COALESCE()函数最常出现在一个具体的内容中,如一个查询或视图或存储过程中。

你可以将COALESCE()放在一个函数中来使用它,也可以通过将它放在一个单独的计算列中优化性能,并总能获得结果。



相关阅读:
PHP验证码类代码( 最新修改,完全定制化! )
Oracle数据库重做日志文件丢失后的恢复
一个完整的Access数据库处理系统
调整FreeBSD的虚拟内存系统
SpeedPHP强大并智能的对象初始化工具
CSS3 网页下拉菜单代码解释 中文翻译
js实现图片显示局部,鼠标经过显示全部的效果
人们期待的CSS3的10大功能
批处理实现文本内容居中显示的代码
CSS网页布局全精通
关于JavaScript的gzip静态压缩方法
学习js所必须要知道的一些
oracle函数使用:decode和nvl函数
SQL语句判断已知表是否存在
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 春雨,你来啦!作文400字 过得刚好 妈妈,请您爱我吧! 有趣的昆虫 教师党员创先争优学习总结 亲爱的,这将是我最后一次这样叫你,你会允许的吧 。、 不再轻言放弃 花开花落、浓过秋作文100字 春天真美作文 不要让中国儿童成为精神上的“东亚病夫” 捡瓶子的小姑娘作文800字 2016年旅游办年度工作计划 描写菊花颜色的段落 住在心里,却告别在生活里作文900字 徐瑶,我想对你说……700字 2016年入学生会竞选演讲稿范文 给领导祝酒的祝福语 最新初中欢天喜地之除夕迎春作文900字 谁关注你的背影 从来都是我一个人的执着 2017年鸡年祝福短信 “克隆作文”成因的换位透析 2016煤炭保证书 中学党支部书记述职报告 小学五年级作文500字:甘当井底蛙 小学四年级作文300字:和我们一样享受和平的世界 关于PPT制作的演讲方式 春风徐来 林业局党组中心组学习制度范例 读《一个闯海的人》有感_500字 卖火柴的小女孩,请到我家来500字 泪100字 忋人日记 我与同桌的“世界大战” 党支部职责 暑期学生安全保证书范文 标准护士节活动策划方案模板 青年党员两学一做心得体会 小学五年级作文500字:树叶的香味 难忘那一元钱 隐匿的爱 原谅所有的时过境迁 与奶奶一起走过的日子作文 一池荷,一帘梦 祖国,我的母亲作文250字 读《矿工的狗》有感 读卖火柴的小女孩有感_350字精选8篇 森林防火作文400字 县域经济发展问题的调研和思考 2010年社区个人工作总结

Copyright © 2016 phpStudy |