Tsql 在列中绘制为字符串-仅当唯一时

Tsql 在列中绘制为字符串-仅当唯一时,tsql,Tsql,在另一篇帖子中,我询问了如何改进下面的查询,该查询目前返回: 现在我还有一个问题。如何修改代码,使其仅具有在整个字符串中唯一的错误代码的最终群集字符串,以便第1行只返回一个B、C、A(跳过第二个C和第二个A) 问候, 阿瑞克 如果我理解正确,那么在返回CSV的子查询中添加一个DISTINCT就足够了: 东西( ( 选择**不同**','+错误代码--删除** 来自@table1 t1 其中t1.[Case]=tabel2.[Case] 和t1.【日期】=表2.【日期】 对于XML路径(“”)

在另一篇帖子中,我询问了如何改进下面的查询,该查询目前返回:

现在我还有一个问题。如何修改代码,使其仅具有在整个字符串中唯一的错误代码的最终群集字符串,以便第1行只返回一个B、C、A(跳过第二个C和第二个A)

问候,

阿瑞克


如果我理解正确,那么在返回CSV的子查询中添加一个
DISTINCT
就足够了:

东西(
(
选择**不同**','+错误代码--删除**
来自@table1 t1
其中t1.[Case]=tabel2.[Case]
和t1.【日期】=表2.【日期】
对于XML路径(“”)
),

这很好-谢谢!:)但是。。如何维持原有秩序?那么更复杂的选项1如何?只检查两个后续代码的重复项(而不是整个集群)?@ArkadiuszCiesielski如果这是一个新问题,请避免后续问题。一个原则是:一个问题-一个问题-一个解决方案这使得追随者更容易找到他们想要的东西(无需通过评论挖掘)。简言之:(非常重要的是要知道!)没有原始订单!。如果没有显式排序(通过使用排序依据),则无法保证集合的顺序。我建议在表中添加一个
IDENTITY
列,以便在插入时进行排序。
    DECLARE @table1 TABLE
(
    [Case] INT,
    ErrorCode CHAR(1),
    [Date] varchar(20)
);

INSERT INTO @table1
VALUES
(1, 'A', '2018-01-25'),
(1, 'B', '2018-01-15'),
(1, 'C', '2018-01-15'),
(1, 'A', '2018-01-15'),
(1, 'C', '2018-01-15'),
(1, 'A', '2018-01-15'),
(2, 'D', '2018-01-26'),
(2, 'A', '2018-01-26'),
(2, 'D', '2018-01-25'),
(2, 'C', '2018-01-24'),
(2, 'C', '2018-01-24');

SELECT *
FROM @table1;

SELECT tabel2.[Case],
       tabel2.[Date],
       STUFF(
       (
           SELECT ', ' + ErrorCode
           FROM @table1 t1
           WHERE t1.[Case] = tabel2.[Case]
                 AND t1.[Date] = tabel2.[Date]
           FOR XML PATH('')
       ),
       1,
       1,
       ''
            ) AS [ErrorCode]
FROM
(SELECT DISTINCT [Case], [Date] FROM @table1) AS tabel2
ORDER BY tabel2.[Case],
         tabel2.[Date];