在SQL Server中连接非重复列值

pu3pd22g  于 2023-01-29  发布在  SQL Server
关注(0)|答案(3)|浏览(129)

我尝试连接许多列,并用逗号分隔,如下所示:

Column
------
abc
bcd
bgd
abc

预期产出:abc,bcd,bgd
我正在使用此代码:

CREATE FUNCTION concatinate(@PK uniqueidentifier)
RETURNS varchar(max)
AS 
BEGIN
    DECLARE @result varchar(max)

    SELECT @result = ISNULL(@result + ', ', '') + Column
    FROM table

我得到的结果是

abc,bcd,bgd,abc

我不能只选择不同的值。请指导。

6ie5vjzr

6ie5vjzr1#

假设您的表名为tb,则您的sql查询将为:

SELECT dist.Column  + ','
FROM(
     SELECT DISTINCT t.Column
     FROM dbo.tb t) dist
FOR XML PATH ('')

使用这种方法你会得到唯一的值。但是在最后你会得到一个额外的逗号','。这可以通过使用字符串帮助函数来移除。希望这能有所帮助

cwdobuhd

cwdobuhd2#

对原始代码的一些修改:

DECLARE @result varchar(max)

SELECT @result = ISNULL(@result + ', ', '') + dist.Column
FROM (SELECT DISTINCT Column FROM table) dist

PRINT(@result)

这将连接一个不同的列表。与上面的初始答案不同,你不会在末尾得到一个额外的逗号','。

ct2axkht

ct2axkht3#

这个问题有7年,因为这一刻,但这里是一个解决方案:

SELECT 
    STRING_AGG(Column1, ',') AS comma_separated
FROM 
    (SELECT DISTINCT Column1 FROM table1) AS T1

这适用于SQL Server 14.x和更高版本,应该会给予确切的信息。

相关问题