删除sql列中的重复连接值

时间:2017-10-19 21:16:35

标签: sql sql-server

我正在使用我们最近所做的库存计数中的参考文本更新数据库中的产品库位置。某些产品有多个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 ;

我得到了我想要的结果,除了一些产品在同一个地方被计算两次,所以一些结果具有相同的值两次

enter image description here

有没有办法摆脱重复?

1 个答案:

答案 0 :(得分:1)

据推测,您的意思是连接列表中的重复项。

好吧,您可以使用select distinctgroup by删除重复项:

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;

注意:

  • 在相关子查询中,您应始终限定所有列引用,以避免错误。
  • 假设StockCountID是一个数字,请不要使用引号进行比较。
  • 我更喜欢在子查询中生成不同的行。我相信这是一个性能提升。
相关问题