1

XML パスを使用して SQL 連結を実行しようとしていますが、少し問題が発生しています。連結したい値の参照テーブルとして使用されているテーブルが 1 つあります。参照テーブルには 3 つの列があります (M.PROD、S.PROD、および REF NUMB)。

  • M.PROD=====>S.PROD======>参照番号
  • 1===========> _ ===========>981024583
  • 2===========> _ ===========>981024719
  • 3===========>===========>981024605
  • 3===========> B ===========>981024669
  • 4===========>===========>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===========>ヌル
  • 2===========>ヌル
  • 3===========>981024605
  • 3===========>981024669
  • 4===========>981024688
  • 4===========>981024723
  • 5===========>ヌル
  • 6===========>ヌル

これらの場合に必要な出力は次のとおりです。

  • 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 に答える