1

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

  • M.PROD=====>S.PROD======>参考麻木
  • 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======>参考麻木
  • 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======>参考麻木
  • 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======>参考麻木
  • 1===========>NULL
  • 2============>NULL
  • 3===========>981024605
  • 3===========>981024669
  • 4===========>981024688
  • 4===========>981024723
  • 5===========>NULL
  • 6===========>NULL

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

  • M.Prod======>参考麻木
  • 1===========>981024583
  • 2===========>981024719
  • 3===========>981024605、981024669
  • 4===========>981024688、981024723
  • 5===========>981024742
  • 6===========>981024742

对此的任何解决方案将不胜感激,谢谢。

4

1 回答 1

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
于 2012-12-22T17:11:15.720 回答