删除sql列中重复的连接值

删除sql列中重复的连接值,sql,sql-server,Sql,Sql Server,我正在使用我们最近进行的库存盘点中的参考文本更新数据库中的产品箱位置。有些产品有多个bin位置,因此我使用此SQL将所有bin位置拉入一个表中: SELECT SCT.ProductID, STUFF ((SELECT ',' + ReferenceText FROM StockCounttickets SCT2 WHERE SCT2.ProductId = SCT.ProductID AND SC

我正在使用我们最近进行的库存盘点中的参考文本更新数据库中的产品箱位置。有些产品有多个bin位置,因此我使用此SQL将所有bin位置拉入一个表中:

SELECT 
    SCT.ProductID,
    STUFF ((SELECT ',' + ReferenceText 
            FROM StockCounttickets SCT2
            WHERE SCT2.ProductId = SCT.ProductID 
              AND SCT2.StockCountID = '10873'
            ORDER BY ProductID
            FOR XML PATH(''), TYPE).value('.', 'varchar(max)'), 1, 1, '') AS Products
FROM 
    StockCountTickets SCT
WHERE 
    SCT.StockCountID = '10873'
GROUP BY 
    ProductID ;
我得到了我想要的结果,除了一些产品在同一个地方被计数两次,所以一些结果有两次相同的值


有没有办法消除重复项?

您大概是指串联列表中的重复项

好的,您可以使用select distinct或group by删除重复项:

注:

在相关子查询中,应始终限定所有列引用以避免错误。 假设StockCountID是一个数字,不要使用引号进行比较。 我更喜欢在子查询中生成不同的行。我相信这是一个性能提升。
在“选择”之后和“选择”之前添加DISTINCT。哇,非常感谢。真是太棒了。谢谢你的建议,我需要我能得到的一切!对不起,我是新来的。我怎样才能把这个标记为已回答?@RobFritch。在问题的顶部应该有一个接受按钮。
SELECT SCT.ProductID,
       STUFF( (SELECT DISTINCT ',' + SCT2.ReferenceText 
               FROM StockCounttickets SCT2
               WHERE SCT2.ProductId = SCT.ProductID AND 
                     SCT2.StockCountID = 10873
               ORDER BY SCT2.ProductID
               FOR XML PATH(''), TYPE).value('.', 'varchar(max)'
                                            ), 1, 1, '') AS Products
FROM (SELECT DISTINCT SCT.ProductId
      FROM StockCountTickets SCT
      WHERE SCT.StockCountID = 10873
     ) SCT;