Tsql 使用DISTINCT子句将多行连接成单个文本字符串?

Tsql 使用DISTINCT子句将多行连接成单个文本字符串?,tsql,concatenation,distinct,Tsql,Concatenation,Distinct,这非常接近,但与“将多行连接成单个文本字符串”的帖子不同 但我需要的是,因为表/行有许多相同的名称,所以我只希望显示不同的名称。所以,在上面的帖子和谷歌的帮助下,我终于成功了 171444 ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE 169171退休,退休,退休,退休,退休 173648 RETIRED,RETIRED,RETIRED,RETIRED,INELIGIBLE,INELIGIBLE 173648 RETIR

这非常接近,但与“将多行连接成单个文本字符串”的帖子不同

但我需要的是,因为表/行有许多相同的名称,所以我只希望显示不同的名称。所以,在上面的帖子和谷歌的帮助下,我终于成功了

171444  ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE,ACTIVE
169171退休,退休,退休,退休,退休

173648  RETIRED,RETIRED,RETIRED,RETIRED,INELIGIBLE,INELIGIBLE
173648  RETIRED,INELIGIBLE
但我想要的是:

171444  ACTIVE
169171已退役

173648  RETIRED,RETIRED,RETIRED,RETIRED,INELIGIBLE,INELIGIBLE
173648  RETIRED,INELIGIBLE
我想我成功了:

Select distinct ST2.EmployeeID, 
           substring((Select DISTINCT (',' + ( ST1.AccrualStatus )) AS [text()]
            From dbo.Plan2 ST1
            Where ST1.EmployeeID = ST2.EmployeeID
            For XML PATH ('')),2, 1000) [Plan2]
     From dbo.Plan2 ST2

子字符串中需要第二个不同的值,以确保每个值只返回一个出现值。

这个答案是根据您上次的评论得出的

假设您的表至少包含一个
[EmployeeID]
列和一个
[Statuses]
VARCHAR列,该列的宽度足以包含任意的状态字符串(我假设它们是状态),您可以做的是:

UPDATE OT1
SET OT1.[Statuses] = OT2.[text]
FROM [OtherTable] AS OT1
JOIN (
    Select distinct ST2.EmployeeID, 
           substring((Select DISTINCT (',' + ( ST1.AccrualStatus )) AS [text()]
            From dbo.Plan2 ST1
            Where ST1.EmployeeID = ST2.EmployeeID
            For XML PATH ('')),2, 1000) [Plan2]
    From dbo.Plan2 ST2
) AS OT2([EmployeeID],[text])
    ON OT1.[EmployeeID] = OT2.[EmployeeID];
我希望这能奏效

CREATE TABLE T2
    (
      pr VARCHAR(20) ,
      pt VARCHAR(20) ,
      qty INT
    );

INSERT  INTO T2
        ( pr, pt, qty )
VALUES  ( 'A', 'x1', 10 ),
        ( 'A', 'x2', 12 ),
        ( 'A', 'x1', 15 ),
        ( 'B', 'x1', 1 ),
        ( 'B', 'x5', 5 ),
        ( 'C', 'x5', 8 );


SELECT  g1.pt ,
        SUM(qty) AS SumQty ,
        STUFF(( SELECT DISTINCT
                        ', ' + g.pr
                FROM    T2 g
                WHERE   g.pt = g1.pt
              FOR
                XML PATH('')
              ), 1, 1, '') AS pr
FROM    T2 g1
GROUP BY g1.pt




CREATE TABLE T2
    (
      pr VARCHAR(20) ,
      pt VARCHAR(20) ,
      qty INT
    );

INSERT  INTO T2
        ( pr, pt, qty )
VALUES  ( 'A', 'x1', 10 ),
        ( 'A', 'x2', 12 ),
        ( 'A', 'x1', 15 ),
        ( 'B', 'x1', 1 ),
        ( 'B', 'x5', 5 ),
        ( 'C', 'x5', 8 );


SELECT  g1.pt ,
        SUM(qty) AS SumQty ,
        STUFF(( SELECT DISTINCT
                        ', ' + g.pr
                FROM    T2 g
                WHERE   g.pt = g1.pt
              FOR
                XML PATH('')
              ), 1, 1, '') AS pr
FROM    T2 g1
GROUP BY g1.pt
结果:

pt------累计数量------请购单 x1-----------------26-----------------A,B

x2-----------------12-----------------A


x5-----------------13-----------------B,C

我发布了解决方案,因为我无法回答自己的问题。希望它能帮助其他人。我很想得到一些帮助,现在我需要更新另一个表中显示连接项的字段,但遗憾的是,我的update语句在更新时失败,当子查询没有引入EXISTS时,只能在select列表中指定一个表达式。