繁体   English   中英

SQL按组合组连接行

[英]SQL Concatenate Rows by Composite Group

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

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
    ...

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

至少某些DB2版本支持listagg() 因此,棘手的部分是确定组。 您可以通过累加计算行数来实现此目的,其中值是数字。 结果查询如下所示:

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;

在DB2中检查数字可能很棘手。 上面使用了简单的逻辑之间的逻辑,足以满足您的示例数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM