首页 > 解决方案 > 如何将多行合并为一而不重复

问题描述

我的表有名称和标识号,虽然标识号相同,但有时名称拼写不同。它看起来像这样:

no_ Name 
1   cat
1   cat
2   dog
2   dog
2   dg
3   rat

我已经尝试过了,但它不会删除重复项

SELECT Main.no_,
    LEFT(Main.gls,Len(Main.gls)-1) As "gls"
FROM
    (
        SELECT DISTINCT GL2.no_, 
            (
                SELECT GL1.name + ',' AS [text()]
                FROM dbo.gl GL1
                WHERE GL1.no_ = GL2.no_
                ORDER BY GL1.no_
                FOR XML PATH ('')
            ) [gls]
        FROM dbo.gl GL2
    ) [Main]

我希望它看起来像这样:

no_ Name 
1   cat
2   dog,dg
3   rat 

标签: sqlsql-server

解决方案


您可以尝试使用 cte 和 string_agg()

with glcte(no_, Name) as
(
select no_, Name
from gl
group by no_, Name
)
select no_, string_agg(Name, ",")
from glcte
group by no_

推荐阅读