【问题标题】:Assign variable with distinct records分配具有不同记录的变量
【发布时间】:2011-05-25 06:43:02
【问题描述】:

我创建了一个表值函数来返回一个逗号分隔的列表,但在列表中只包含不同的值时遇到了问题。我的功能如下:

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

【问题讨论】:

    标签: sql sql-server tsql sql-server-2000 user-defined-functions


    【解决方案1】:

    您可以尝试将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 中有什么明显更好的方法。

    【讨论】:

    • 干得好,我不确定是否应该使用子查询,并且无论如何也不太确定如何实现它。非常感谢,就像魅力一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2011-11-19
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多