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列表中指定一个表达式。