使用XML Path的SQL连接 - 具有多个表引用的多行

时间:2012-11-12 08:27:53

标签: sql tsql sql-server-2008-r2

我正在尝试使用XML Path来运行SQL Concatenation但我遇到了一些问题。我有一个表用作我想要连接的值的参考表。我在引用表中有3列(M.PROD,S.PROD和& REF NUMB)。

  • M.PROD =====> S.PROD ======> Ref Numb
  • 1 ===========> _ ===========> 981024583
  • 2 ===========> _ ===========> 981024719
  • 3个===========>的 A ===========> 981024605
  • 3 ===========> B ===========> 981024669
  • 4 ===========> A ===========> 981024688
  • 4 ===========> B ===========> 981024706
  • 4 ===========> C ===========> 981024723
  • 5个===========>的 _ ===========> 981024742
  • 6个===========>的 _ ===========> 981024742

我有主表,其中m.prod和s.prod用于匹配Ref Numb值的引用表。我想要做的是根据主表中选择的内容连接Ref Numb值。我正在寻找的输出是:

  • M.Prod ======> Ref Numb
  • 1个===========> 981024583
  • 2个===========> 981024719
  • 3 ===========> 981024605,981024669
  • 4 ===========> 981024688,981024706,981024723
  • 5个===========> 981024742
  • 6个===========> 981024742

我使用以下查询:

SELECT DISTINCT P.PRODUCT, 
    (STUFF((SELECT DISTINCT ',' + P1.REFNUMB AS [text()]
            FROM PRODUCT P1
            WHERE P1.PRODUCT = P.PRODUCT 
            FOR XML PATH('')), 1, 1, ''))
FROM PRODUCT P

这给了我输出:

  • M.Prod ======> Ref Numb
  • 1个===========> 981024583
  • 2个===========> 981024719
  • 3 ===========> 981024605,981024669
  • 4 ===========> 981024688,981024706,981024723
  • 5个===========> 981024742
  • 6个===========> 981024742

但是,有时候所有s.prod都不在主表中。因此,我使用此查询:

SELECT DISTINCT P.PRODUCT, 
    (STUFF((SELECT DISTINCT ',' + P1.REFNUMB AS [text()]
            FROM PRODUCT P1
            WHERE P1.PRODUCT = P.PRODUCT AND P1.SUBID = P.SUBID
            FOR XML PATH('')), 1, 1, ''))
FROM PRODUCT P

此查询为我生成以下输出:

  • M.Prod ======> Ref Numb
  • 1 ===========> NULL
  • 2 ===========> NULL
  • 3个===========> 981024605
  • 3个===========> 981024669
  • 4个===========> 981024688
  • 4个===========> 981024723
  • 5 ===========> NULL
  • 6 ===========> NULL

在这些情况下我需要的输出是:

  • M.Prod ======> Ref Numb
  • 1个===========> 981024583
  • 2个===========> 981024719
  • 3 ===========> 981024605,981024669
  • 4 ===========> 981024688,981024723
  • 5个===========> 981024742
  • 6个===========> 981024742

非常感谢任何解决方案,谢谢。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解你的问题,但试试这个:

SELECT DISTINCT P.PRODUCT, 
    (STUFF((SELECT DISTINCT ',' + P1.REFNUMB AS [text()]
            FROM PRODUCT P1
            WHERE P1.PRODUCT = P.PRODUCT 
            AND (P1.SUBID = P.SUBID OR P1.SUBID IS NULL AND P.SUBID IS NULL)
            FOR XML PATH('')), 1, 1, ''))
FROM PRODUCT P