Coalesce如何在sql server中运行?

时间:2014-11-27 13:07:49

标签: tsql sql-server-2012 coalesce

Create table test(Names varchar(100) primary key )

insert into test values('Hugeman')
insert into test values('Jack')
insert into test values('William')
insert into test values('Kevin')
insert into test values('Peter')

查询1:

declare @sql varchar(100)
select   @sql = coalesce(@sql+'+','')+Names from test order by names-- where object_id =object_id('temp')  
print @sql

这将导致   的 Hugeman +杰克+凯文+彼得+威廉

查询2

declare @sql varchar(100)
select   @sql = coalesce(Names+'+','')  from test order by names-- where object_id =object_id('temp')  
print @sql

这将导致威廉+

根据coalesce的文档,将返回第一个not null值。所以它必须导致 Hugeman + 。但它返回整行。

为什么query2没有做同样的事情?

4 个答案:

答案 0 :(得分:2)

这与COALESCE没有严格关联。

尝试以下选择:

DECLARE @sql1 AS VARCHAR(1000)
SELECT @sql1 = ISNULL(@sql1, '') + Names FROM test ORDER BY Names
PRINT @sql1

DECLARE @sql2 AS VARCHAR(1000)
SELECT @sql2 = Names FROM test ORDER BY Names
PRINT @sql2

那发生了什么?选择 EACH 记录:

  • 在查询1中,您不断向@sql
  • 添加值
  • 在查询2中,您将@sql重置为提取的姓氏

我不明白你想从SELECT中获得什么,但COALESCE的一个更好的例子可能是:

CREATE TABLE TEST2(Name VARCHAR(100) PRIMARY KEY, Telephone VARCHAR(10), Mobile VARCHAR(10))

INSERT INTO TEST2 VALUES('Hugeman', 1, 2)
INSERT INTO TEST2 VALUES('Jack', NULL, 3)
INSERT INTO TEST2 VALUES('William', 4, NULL)
INSERT INTO TEST2 VALUES('Kevin', 5, 6)
INSERT INTO TEST2 VALUES('Peter', NULL, NULL)

SELECT Name,
    COALESCE(Telephone, Mobile) AS Tel
FROM TEST2

答案 1 :(得分:0)

@sql位于第一个附加的右侧

最后一个@sql在左侧是单独的,并且具有最后一行的值

答案 2 :(得分:0)

Query-1:将所有行的值附加到@sql Query-2:将值重新设置为@sql

以下是按名称排序的行

Hugeman 插口 凯文 彼得 威廉

Query-1将所有值附加到@sql。 Query-2将值重写为@sql,因此列表中的最后一行是William,因此当您打印变量时,将打印最后重新分配的值。

答案 3 :(得分:0)

COALESCE()函数返回来自列的第一个非空值作为COALESCE()函数中的参数。

<强> e.g。

SELECTCOALESCE(null,null,1,2)     ///return --1

SELECT Id, COALESCE(FirstName, MiddleName, LastName) AS Name
FROM tblEmployee           //return 1st non null value from FirstName/MiddleName/LastName