【问题标题】:how to get unique data from multiple columns in db2如何从 db2 中的多个列中获取唯一数据
【发布时间】:2020-03-30 20:36:34
【问题描述】:

我想通过以下方式从 2 列中获取数据:

Id1 id2 id3
1    1    2
2    3    null
2    4    null

O/p

Id1 data
1    1,2
2    3,4

这里id1是pk,id2,id3是其他表的fk。

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    按原样尝试:

    WITH TAB (ID1, ID2, ID3) AS 
    (
    VALUES 
      (1, 1, 2)
    , (2, 3, NULL)
    , (2, 4, NULL)
    )
    SELECT ID1, LISTAGG(DISTINCT ID23, ',') AS DATA
    FROM
    (
    SELECT T.ID1, CASE V.ID WHEN 2 THEN T.ID2 ELSE T.ID3 END AS ID23
    FROM TAB T
    CROSS JOIN (VALUES 2, 3) V(ID)
    )
    WHERE ID23 IS NOT NULL
    GROUP BY ID1;
    

    【讨论】:

      【解决方案2】:

      这有点奇怪——在同一行和多行之间连接。一种方法是先取消透视然后聚合:

      select id1, listagg(id2, ',') within group (order by id2)
      from (select id1, id2 from t union all
            select id1, id3 from t
           ) t
      where id2 is not null
      group by id1;
      

      假设只有id2可以是NULL,你也可以这样表达:

      select id1,
             listagg(concat(id2, coalesce(concat(',', id3), '')), ',') within group (order by id2)
      from t
      group by id1;
      

      【讨论】:

      猜你喜欢
      • 2012-03-23
      • 2023-03-09
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      相关资源
      最近更新 更多