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行。如果我们假设:
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
同名,但这是侵权行为;侵犯自己的产品ツ