如何在SQL中连接行(I)

时间:2016-09-04 06:57:02

标签: sql db2

我花了一天多的时间来连接SQL中的类似行。

我正在使用Squirrel SQL客户端3.6来运行查询。下面是我用来从多个表中获取行的查询。

select
    A.NACCES as NACCES,
    (CASE WHEN A.CLNKTYP = 1 THEN 'must' WHEN A..CLNKTYP = 2 THEN 'not' ELSE 'NONEED' END ) as Link,
    B.NPART as part
from 
    HPL.KACCST B, HPL.KAMCLT A, HPL.KCACMT C
where 
    A.NMOD = '1212'
    and C.NMOD = A.NMOD
    and C.NSALGNP = '223'
    and C.NCUST = ''
    and C.NACCES = A.NACCES
    and B.NACCES = A.NACCES_LINK   

结果是

NACCES     Link   part

  1        must    a
  1        not     b
  1        not     c
  2        must    d
  2        must    e  so on...

现在我需要根据NACCES和Link列连接part列。

我已经在Stack溢出中看到了几个帖子,我尝试了FOR XML PATH查询,但没有运气。

SELECT
    P.accessory,
    P.Link,
    STUFF((SELECT DISTINCT ',' + S.part 
           FROM (SELECT A.NACCES as NACCES, 
                        (CASE 
                            WHEN A.CLNKTYP = 1 THEN 'must' WHEN A..CLNKTYP = 2 THEN 'not' ELSE 'NONEED' 
                          END) as Link, 
                        B.NPART as part 
                 FROM HPL.KACCST B, HPL.KAMCLT A, HPL.KCACMT C
                 WHERE A.NMOD = '1212' AND C.NMOD = A.NMOD AND C.NSALGNP = '223'
                   AND C.NCUST = '' AND C.NACCES = A.NACCES AND B.NACCES = A.NACCES_LINK) AS S 
          WHERE S.NACCES = P.NACCES  
            AND S.Link = P.Link 
          FOR XML PATH('')), 1, 1, '') AS PART
FROM
    (SELECT
         A.NACCES as NACCES,
         (CASE WHEN A.CLNKTYP = 1 THEN 'must' WHEN A..CLNKTYP = 2 THEN 'not' ELSE 'NONEED' END ) as Link,
         B.NPART as part
     FROM 
         HPL.KACCST B, HPL.KAMCLT A, HPL.KCACMT C
     WHERE
         A.NMOD = '1212'
         AND C.NMOD = A.NMOD
         AND C.NSALGNP = '223'
         AND C.NCUST = ''
         AND C.NACCES = A.NACCES
         AND B.NACCES = A.NACCES_LINK) AS P
GROUP BY 
    P.NACCES, P.Link

错误:

  

DB2 SQL错误:SQLCODE = -199,SQLSTATE = 42601,SQLERRMC = FOR ;;(。AT

     

MICROSECONDS MICROSECOND SECONDS第二分钟分钟,驾驶员= 3.53.95
  SQLState:42601

     

ErrorCode:-199
  错误:DB2 SQL错误:SQLCODE = -514,SQLSTATE = 26501,SQLERRMC = SQL_CURLH200C1,DRIVER = 3.53.95
  SQLState:26501
  ErrorCode:-514

我在Squirrel工具中尝试使用GROUP_CONCAT,我收到GROUP_CONCAT错误。

请注意我正在使用Squirrel来运行查询,我希望这会导致FOR XML语法无法执行。

我尝试过COALESCE,但这也没有用。请帮帮我。

1 个答案:

答案 0 :(得分:0)

经过大量搜索后,我找到了连接db2中列的查询。

选择NACCES,LINK,替换(替换(替换(演员)(由S.PART制作的XMLSERIALIZE(内容XMLAGG)(XMLELEMENT(名称" x",S.PART)) AS CLOB(1000))作为varchar(1024)),'',','),'','' ),'','')作为PART 从 (        选择accessorym1_.NACCES作为NACCES,(例如,当accessorym1_.CLNKTYP = 1那么'必须'                                            当accessorym1_.CLNKTYP = 2那么“不兼容”'                                            ELSE' NONEED' END)作为LINK,accessory0_.NPART作为PART来自               HPL.KACCST accessory0_,HPL.KAMCLT accessorym1_,HPL.KCACMT customerac2_ 其中accessorym1_.NMOD =' 1212'和customerac2_.NMOD = accessorym1_.NMOD和customerac2_.NSALGNP =' 223'和 customerac2_.NCUST =''和customerac2_.NACCES = accessorym1_.NACCES和accessory0_.NACCES = accessorym1_.NACCES_LINK           )P

谢谢你们的评论。