0

所以我有两个 db2 表。一个包含工作订单信息,如 id、请求者姓名、用户、描述等。第二个表包含注释,该表与另一个表的 id 相关。注释字段是一个 255 文本字段(是的,不建议更改它,我无法控制它)。因此,在注释字段中可能有多个结果或没有结果,这取决于显然有多少注释。

我有一个获取结果的查询。问题是我从连接中获得了多个结果,因为有多个条目。

所以我的问题是如何将注释表中的结果合并/合并到每个结果的一个字段中?谢谢

代码:

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

您使用的是哪个版本的 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

你试过 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 至少为 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 回答