SQL按组合组连接行

SQL按组合组连接行,sql,db2,recursive-query,db2-luw,Sql,Db2,Recursive Query,Db2 Luw,我需要使用两个分组值,根据行所属的组将行值连接到列中 TBL1 cat1 cat2 cat3 value ---- ---- ---- ----- 1 1 lvl1 100 1 2 lvl2 abc 1 3 lvl2 cba 2 1 lvl1 200 2 2 lvl2 abb 3 1 lvl1 100 3 2 lvl2 bbc

我需要使用两个分组值,根据行所属的组将行值连接到列中

TBL1

    cat1 cat2 cat3 value
    ---- ---- ---- -----
    1    1    lvl1 100
    1    2    lvl2 abc 
    1    3    lvl2 cba 
    2    1    lvl1 200 
    2    2    lvl2 abb
    3    1    lvl1 100
    3    2    lvl2 bbc
    3    3    lvl2 acc
    3    4    lvl1 400
    3    5    lvl2 acc 
    4    1    lvl1 300
    4    2    lvl2 aab
    ...
TBL2

    cat1 cat2 value
    ---- ---- ---------
    1    100  abc, cba
    2    200  abb
    3    100  bbc, aac
    3    400  aac
    4    300  aab
    ...

这是使用静态DB2SQL。实际的表有上千条记录。

至少有一些版本的DB2支持
listag()
。因此,棘手的部分是确定群体。可以通过累计计算值为数字的行数来实现这一点。结果查询如下所示:

select cat1,
       max(case when value >= '0' and value <= '999' then value end) as cat2,
       listagg(case when not value >= '0' and value <= '999' then value end, ', ') within group (order by cat2) as value
from (select t.*,
             sum(case when value >= '0' and value <= '999' then 1 else 0 end) over (order by cat1, cat2) as grp
      from t
     ) t
group by cat1, grp;
选择cat1,

最大值(当value>='0'和value='0'和value='0'以及value是什么DB2版本和平台?DBMS_Ver-11.01.0005我不知道你是如何理解他在问什么的。@Hogan…我从这个网站学到的两件最重要的事情之一是如何理解其他人在问什么——至少在这个非常有限的技术领域是如此。