求助,oracle数据库数据格式化输出问题。

kevin-ke 2013-05-14 03:22:33
例如表t1有如下数据:
name, hobby
a 足球
a 篮球
a 乒乓
b 游泳
b 足球
c 篮球

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

a|足球,篮球,乒乓
b|游泳,足球
c|篮球
...全文
267 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabitsky 2013-05-21
  • 打赏
  • 举报
回复
网上有很多类似的帖子。 借用一下二楼数据:

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||'|'|| wmsys.wm_concat(hobby)
from t
group by t.name
/*
a|足球,篮球,乒乓
b|游泳,足球
c|篮球
*/
software攻城师 2013-05-21
  • 打赏
  • 举报
回复
怎么又是和并列的帖
sych888 2013-05-15
  • 打赏
  • 举报
回复
SQL> select id||'|'||wm_concat(nn) from test1 group by id;

ID||'|'||WM_CONCAT(NN)
----------------------------------------------------------------
a|足球,篮球,乒乓
b|游泳,足球
c|篮球
u010412956 2013-05-15
  • 打赏
  • 举报
回复
把上面的within group(order by t.name) 改成 within group(order by rownum) 就ok了。
u010412956 2013-05-15
  • 打赏
  • 举报
回复
引用 1 楼 wqkjj 的回复:
貌似只能用存储过程或者函数,简单的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;
wqkjj 2013-05-15
  • 打赏
  • 举报
回复
貌似只能用存储过程或者函数,简单的sql是不行的 然后把过程或者函数嵌在sql中
wqkjj 2013-05-15
  • 打赏
  • 举报
回复
引用 4 楼 sych888 的回复:
SQL> select id||'|'||wm_concat(nn) from test1 group by id; ID||'|'||WM_CONCAT(NN) ---------------------------------------------------------------- a|足球,篮球,乒乓 b|游泳,足球 c|篮球
承教!
babyqian84 2013-05-15
  • 打赏
  • 举报
回复
引用 4 楼 sych888 的回复:
SQL> select id||'|'||wm_concat(nn) from test1 group by id; ID||'|'||WM_CONCAT(NN) ---------------------------------------------------------------- a|足球,篮球,乒乓 b|游泳,足球 c|篮球
这个方法是可以的,但是有局限性,“足球,篮球,乒乓”的顺序是不固定的,用order by也没用,所以如果对顺序有要求的时候慎用

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧