避免在连续列表中重复

时间:2012-05-24 21:17:13

标签: sql-server sql-server-2005

我有一个场景,我想要csv列表中两个表的发票号码。我可以使用Stuff完成此操作,如下所示:

SELECT
   sopnumbe
  ,custname 
  ,Invoices = 
        STUFF((SELECT DISTINCT ', '+ RTRIM(a.sopnumbe)+', '+ RTRIM(B.sopnumbe)
               FROM 
                  SOP10100  a
                  fULL OUTER JOIN 
                  SOP30200 B
                  ON a.ORIGNUMB =B.ORIGNUMB
               WHERE a.ORIGNUMB =@ordernumb
               FOR XML PATH('')) , 1 , 1 , '' )
FROM SOP10100
WHERE
    SOPNUMBE = @ordernumb

上述查询会产生正确的结果,但列表中的重复发票号除外。有没有其他方法可以实现这个目标?


if the result of simple outer join query is:

INV1527157              INV1523836        
INV1527157              INV1526475  


东西查询的结果:

K08081383206      BACHELOR CONTROLS INC    INV1527157, INV1523836, INV1527157, INV1526475

INV1527157重复,我想摆脱重复。

1 个答案:

答案 0 :(得分:1)

您可能希望UNIONA一起尝试B结果,而不是完整的外部联接:

SELECT ', '+ RTRIM(sopnumbe)
FROM (SELECT sopnumbe FROM SOP10100 a WHERE a.ORIGNUMB = @ordernumb
      UNION
      SELECT sopnumbe FROM SOP30200 b WHERE b.ORIGNUMB = @ordernumb
) RESULT

这将仅返回两个子查询的不同结果。