日期:2014-05-17  浏览次数:20780 次

求助,oracle数据库数据格式化输出问题。
例如表t1有如下数据:
name, hobby
a        足球
a        篮球
a        乒乓
b        游泳
b        足球
c        篮球

如何用sql语句实现
结果如下:

a|足球,篮球,乒乓
b|游泳,足球
c|篮球
Oracle 数据库 格式化

------解决方案--------------------
貌似只能用存储过程或者函数,简单的sql是不行的
然后把过程或者函数嵌在sql中
------解决方案--------------------
引用:
貌似只能用存储过程或者函数,简单的sql是不行的
然后把过程或者函数嵌在sql中


sql有什么不可以的

with t as
 (select 'a' name, '足球' hobby
    from dual
  union all
  select 'a' name, '篮球' hobby
    from dual
  union all
  select 'a' name, '乒乓' hobby
    from dual
  union all
  select 'b' name, '游泳' hobby
    from dual
  union all
  select 'b' name, '足球' hobby
    from dual
  union all
  select 'c' name, '篮球' hobby from dual)
select t.name 
------解决方案--------------------
 '
------解决方案--------------------

------解决方案--------------------
 listagg(hobby, ',') within group(order by t.name)
  from t
 group by t.name;

------解决方案--------------------
把上面的within group(order by t.name)
改成
within group(order by rownum)
就ok了。
------解决方案--------------------
SQL> select id
------解决方案--------------------
'
------解决方案--------------------
'
------解决方案--------------------
wm_concat(nn) from test1 group by id;

ID
------解决方案--------------------
'
------解决方案--------------------
'
------解决方案--------------------
WM_CONCAT(NN)
----------------------------
a
------解决方案--------------------
足球,篮球,乒乓
b