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