我创建了一个Table-Valued函数来返回逗号分隔列表,但是列表中的问题只包含不同的值。我的功能如下:
CREATE FUNCTION [dbo].[clientContactsConcat] ( @clnum INT )
RETURNS NVARCHAR(4000)
AS BEGIN
DECLARE @concat NVARCHAR(4000)
SELECT @concat =COALESCE(@concat, ' ') + clcontact + ', '
FROM dbo.client
WHERE crelated = @clnum
AND NOT clcontact IS NULL
SELECT @concat = SUBSTRING(@concat, 2, LEN(@concat) - 2)
RETURN ( @concat )
END
这将列出所有值,当我将SELECT修改为SELECT DISTINCT @concat =COALESCE(@concat, ' ') + clcontact + ', '...
时,它将仅返回select返回的第一个结果。
在与COALESCE一起分配变量时,有没有办法只返回不同的记录?
以下记录:
clcontact
---------------------
Mr S Smith
Mrs R Jones
Ms L Morrison
Mrs R Jones
我希望返回以下内容:Mr S Smith, Mrs R Jones, Ms L Morrison
。
答案 0 :(得分:2)
您可以尝试将SELECT DISTINCT
放入派生表中。
SELECT @concat =COALESCE(@concat, ' ') + clcontact
FROM
(
SELECT DISTINCT clcontact + ', ' AS clcontact
FROM dbo.client
WHERE crelated = @clnum
AND NOT clcontact IS NULL
) T
请注意这种连接字符串is not guaranteed to work的方法,但我不确定SQL Server 2000中有哪种明显更好的方法。