Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL联接然后合并结果中的列_Sql_Db2 - Fatal编程技术网

SQL联接然后合并结果中的列

SQL联接然后合并结果中的列,sql,db2,Sql,Db2,所以我有两个db2表。其中一个包含工单信息,如id、请求者名称、用户、描述等。第二个表包含注释,该注释被键入另一个表的id。notes字段是一个255文本字段是的,不要建议更改它,我无法控制它。因此,根据注释的数量,注释字段中可能有多个结果,或者没有结果 我有一个获取结果的查询。问题是我从连接中得到了多个结果,因为有多个条目 因此,我的问题是如何将notes表中的结果合并到每个结果的一个字段中?谢谢 代码: 你试过LISTAGG吗 它将允许您合并所有导致附加记录的讨厌字段。。。像这样的 SELE

所以我有两个db2表。其中一个包含工单信息,如id、请求者名称、用户、描述等。第二个表包含注释,该注释被键入另一个表的id。notes字段是一个255文本字段是的,不要建议更改它,我无法控制它。因此,根据注释的数量,注释字段中可能有多个结果,或者没有结果

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

因此,我的问题是如何将notes表中的结果合并到每个结果的一个字段中?谢谢

代码:

你试过LISTAGG吗

它将允许您合并所有导致附加记录的讨厌字段。。。像这样的

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

您使用的是什么版本的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

如果您至少运行的是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函数,那么您可以使用递归查询来解决这个问题。这两种技术将在下面的博客中介绍


LISTAGG似乎不是此SQL的一部分。我收到一个错误,说它不是found,只是注意到您说Listag不适合您,这是在DB2LUW9.7中添加的。但是,我相信XML函数从版本9开始就已经存在了,所以这可能仍然适用于您。我想这取决于您所使用的平台和版本嗯,你有双,所以在我纠正后,我得到它不喜欢AS-in-AS-VARCHAR这个关键字,这是这里没有预料到的。在关键字AS处检测到语法错误。有效令牌的部分列表无效。在令牌“A”处检测到语法错误。标记“A”不是有效的标记。有效令牌的部分列表是有效的,这是否有效?从Htedta.WfaIcpp中选择XMLELEMENT名称“A”,aiaktx;-您使用的是什么版本的DB2?
    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;