Sql 需要帮助分组行吗

Sql 需要帮助分组行吗,sql,oracle,plsql,aggregate-functions,string-aggregation,Sql,Oracle,Plsql,Aggregate Functions,String Aggregation,可能重复: 我有一个以以下方式存储数据的表- 60333,120102,20120502,010000,1,2 60333,120102,20120502,020000,3,4 60333,120102,20120502,030000,5,6 60333,120102,20120502,040000,7,8 61663,120103,20120502,010000,9,10 61663,120103,20120502,020000,11,12 61663,120103,2

可能重复:

我有一个以以下方式存储数据的表-

60333,120102,20120502,010000,1,2

60333,120102,20120502,020000,3,4 

60333,120102,20120502,030000,5,6 

60333,120102,20120502,040000,7,8 

61663,120103,20120502,010000,9,10 

61663,120103,20120502,020000,11,12 

61663,120103,20120502,030000,13,14 

61663,120103,20120502,040000,15,16 

60333,120102,20120503,010000,17,18 

60333,120102,20120503,020000,19,20 

60333,120102,20120503,030000,21,22 

60333,120102,20120503,040000,23,24 
我希望显示如下输出:

60333,120102,20120502,1,2,3,4,5,6,7,8

60333,120102,20120503,17,18,19,20,21,22,23,24

61663,120103,20120502,,9,10,11,12,13,14 ,15,16
对于唯一的60333120102和日期,所有数据需要显示在一行中,而不是4行。

如果我们假设:

  • 第4列只能取4个值(010000020000300000040000)和
  • 您希望输出中始终有11列
  • 然后你需要一个,它是这样的:

    select c1, c2, c3, 
        max(decode(c4, '010000', c5)) as c5for010000,
        max(decode(c4, '010000', c6)) as c6for010000,
        max(decode(c4, '020000', c5)) as c5for020000,
        max(decode(c4, '020000', c6)) as c6for020000,
        max(decode(c4, '030000', c5)) as c5for030000,
        max(decode(c4, '030000', c6)) as c6for030000,
        max(decode(c4, '040000', c5)) as c5for040000,
        max(decode(c4, '040000', c6)) as c6for040000
    my_table
    group by c1, c2, c3;
    
    试试这个:

    select a, b, c, listagg(e || ',' || f, ',') WITHIN GROUP (ORDER BY e) as x
    from tbl
    group by a, b, c
    

    现场测试:

    您打算怎么做?(例如,对其他列的值求和或以逗号分隔显示它们?)列和表的名称是什么?最后,到目前为止您尝试了什么?这实际上是一个非常常见的问题。我确定的线程有一个可能的Dup,它有多种不同的解决方案,这取决于您使用的数据库版本和其他东西。我只是在这里保留了我的答案(仅适用于Oracle版本11),以强调功能开箱即用的简单性。Oracle应该与MySQL的
    GROUP_CONCAT
    同名,但这是侵权行为;侵犯自己的产品ツ