当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server COALESCE()函数的创新应用

MSSQL
深入介绍:SQL Server变更管理工具
SQL Server日志文件总结及充满处理方式
sql查询like操作数剖析
Windows 2003不太喜欢SQL Server2000
教您 SQL SERVER 2005 同步复制技术
深入浅出SQL教程之子查询语句
简单谈基于SQL SERVER 分页存储过程的演进
深入浅出SQL教程之SELECT语句中的表连接
安装SQL Server 2000的错误及解决
为增强安全性 SQL Server加密备份
在SQL Server中为安全依从性记录日志
深入浅出SQL系列教程之基本SELECT命令
SQL Sever中有关DATALENGTH的用法
SQL Server数据库性能优化技术
SQL Server基本函数详细介绍
SQL Server中数据仓库的构建与分析
sql2005的xml字段类型在.net中的应用
SQL注入奇致胜 Union查询轻松看电影
SQL Server 2005与DB2 8.2对比分析
SQL Server 连接中四种最常见错误

MSSQL 中的 SQL Server COALESCE()函数的创新应用


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-17   浏览: 42 ::
收藏到网摘: n/a

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

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

如果你想用一个字符串列出他们的全名,下面给出了如何使用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()放在一个函数中来使用它,也可以通过将它放在一个单独的计算列中优化性能,并总能获得结果。