如何在SQL中连接行(I)

如何在SQL中连接行(I),sql,db2,Sql,Db2,我花了一天多的时间连接SQL中类似的行 我正在使用squirrelsqlclient3.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.K

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

我正在使用squirrelsqlclient3.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列连接部分列

我在Stack overflow中看到过几篇关于这个的文章,我尝试了XML路径查询,但没有成功

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
错误:

DB2SQL错误:SQLCODE=-199,SQLSTATE=42601,SQLERRMC=FOR。在

微秒微秒秒分分钟,驱动器=3.53.95 SQLState:42601

错误代码:-199 错误:db2sql错误:SQLCODE=-514,SQLSTATE=26501,SQLERRMC=SQL\u CURLH200C1,DRIVER=3.53.95 SQLState:26501 错误代码:-514

我试过在Squirrel工具中使用GROUP_CONCAT,我得到GROUP_CONCAT不可用错误

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


我尝试了COALESCE,但这也不起作用。请帮帮我。

经过大量搜索,我找到了用于在db2中连接列的查询

选择NACCES、LINK、ReplaceCastXmlSerializeContent XMLAGGXMLELEMENTNAME x,S.PART按S.PART排序 作为CLOB1000作为varchar1024,,,,的一部分 从…起 选择accessorym1_u2;.NACCES作为NACCES,如果accessorym1_2;.CLNKTYP=1,则为“必须” 当accessorym1_uux.CLNKTYP=2时,则为“不兼容” ELSE“NONEED”结束为链接,accessory0\u0.NPART作为来自的一部分 HPL.KACCST附件0、HPL.KAMCLT附件1、HPL.KCACMT客户2 其中accessorym1_u0.NMOD='1212'和customerac2_0.NMOD=accessorym1_0.NMOD和customerac2_0.NSALGNP='223',和 customerac2_u0.NCUST=和customerac2_0.NACCES=附件M1_0.NACCES和附件0_0.NACCES=附件M1_0.NACCES\u链接 P


感谢大家的评论。

-20多年前,ANSI-92 SQL标准中的老式逗号分隔表样式已被正确的ANSI联接语法所取代,因此不鼓励使用这种样式。我将避免使用那些老式联接。但现在,这不是我关心的。你能帮我把@marc_sDB2有listag:或者listag函数不起作用的行连接起来吗..有人能帮我吗