0

したがって、2つのdb2テーブルがあります。1つには、ID、リクエスター名、ユーザー、説明などの作業指示情報が含まれます。もう1つのテーブルには、他のテーブルのIDにキー設定されたメモが含まれます。メモフィールドは255のテキストフィールドです(変更することはお勧めしません。私はそれを制御できません)。したがって、明らかにノートの数に応じて、ノートフィールドに複数の結果が表示される場合と、まったく表示されない場合があります。

結果を取得するクエリがあります。問題は、複数のエントリがあるため、結合から複数の結果が得られることです。

だから私の質問は、どのようにノートテーブルからの結果をすべての結果に対して1つのフィールドに連結/マージするのですか?ありがとう

コード:

SELECT 
    p.ABAANB AS WO_NUMBER, 
    p.ABAJTX AS Description, 
    i.AIAKTX as Notes 
FROM 
    htedta.WFABCPP p LEFT JOIN  HTEDTA.WFAICPP i 
    ON i.AIAANB = p.ABAANB 
WHERE 
    p.ABABCD = 'ISST' AND p.ABAFD8 = 0
4

3 に答える 3

0

LISTAGGを試しましたか

https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/listagg?lang=en

それはあなたが追加のレコードを引き起こしているそれらの厄介なフィールドをすべてマージすることを可能にします...このようなもの...

SELECT p.ABAANB AS WO_NUMBER, p.ABAJTX AS Description, LISTAGG(i.AIAKTX, ' ') as Notes 
FROM htedta.WFABCPP p 
LEFT JOIN  HTEDTA.WFAICPP i 
    ON i.AIAANB = p.ABAANB 
WHERE p.ABABCD = 'ISST' 
    AND p.ABAFD8 = 0
GROUP BY p.ABAAMB, p.ABAJTX
于 2012-08-03T16:27:11.603 に答える
0

DB2 のどのバージョンを使用していますか? DB2 Linux/Unix/Windows (LUW) を使用している場合、これでうまくいくはずです。

SELECT p.ABAANB AS WO_NUMBER, 
       p.ABAJTX AS Description, 
      ,SUBSTR(
          xmlserialize(
             xmlagg(
                xmltext(
                   concat(',' , TRIM(i.AIAKTX))
                )
             ) AS VARCHAR(4000)
          )
          ,2) AS NOTES
FROM      htedta.WFABCPP p
LEFT JOIN HTEDTA.WFAICPP i 
       ON i.AIAANB = p.ABAANB 
WHERE p.ABABCD = 'ISST'
  AND p.ABAFD8 = 0
GROUP BY p.ABAANB,
         p.ABAJTX
于 2012-08-03T19:22:09.487 に答える
0

DB2 9.7 以降を実行している場合は、次のような XMLAGG 関数を使用できるはずです。

    WITH CombinedNotes( aiaanb, aiaktx) AS (
      SELECT aiaanb
        , REPLACE( REPLACE( 
              CAST( XML2CLOB(
                  XMLAGG( XMLELEMENT( 
                        NAME 'A'
                      , aiaktx
                  ))
              ) AS VARCHAR( 3000))
            , '<A>',''), '</A>', '')
        FROM Htedta.WfaIcpp)
    SELECT p.ABAANB AS WO_NUMBER, p.ABAJTX AS Description, i.AIAKTX as Notes 
      FROM htedta.WFABCPP p 
        LEFT JOIN  CombinedNotes i 
        ON i.AIAANB = p.ABAANB
      WHERE p.ababcd = 'ISST'
        AND p.abafd8 = 0; 

以前のバージョンの DB2 を使用している場合、または何らかの理由でログインで XML 機能が許可されていない場合は、再帰クエリを使用して問題を解決できます。両方の手法については、次のブログで説明されています。

http://ibmmainframes.com/about44805.html

于 2012-08-03T19:36:12.767 に答える