SQL Join然后组合结果中的列

时间:2012-08-03 16:21:14

标签: sql db2

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

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

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

代码:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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

相关问题