欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle 结果集排列组合解决方法

更新时间: 2014-01-05 02:10:18 责任编辑: Author_N1

 

oracle 结果集排列组合
有这样一个需求,原始数据为:
NAME        GROUP
n1           null
n2            g1
n3            g1
n4            g2
n5            g2
需求,将名称按组进行排列组合,中间用:分隔,要求结果为
  RESULT
n1:n2:n4
n1:n2:n5
n1:n3:n4
n1:n3:n5
也就是,每组最多有两个,每多一组,最后的结果集数量翻倍。求高手指点该怎么做,要用sql实现
--参考方法--
没看懂,如果再多个g3会怎样
--参考方法--
想了半天,能想出来的只有通过过程。
更好的思路请看楼下讲解。
--参考方法--
这个题目还是有点难度的,你可以去itpub问问。。
--参考方法--
http://www.itpub.net/thread-763065-1-1.html

看看这个:

SQL> 
SQL> select replace (a.combo, '#') as "组合"
  2  from
  3    (select id,sys_connect_by_path (value, '#') 
--参考方法--
 '#' combo
  4            from (select 1 as id,value,1 as ctrl from users)
  5            connect by prior id = id and value > prior value ) a,
  6                   (select 1 as id,value,1 as ctrl from users) b
  7     where b.id = a.id and instr (a.combo, '#' 
--参考方法--
 b.value 
--参考方法--
 '#') > 0
  8  group by a.id, a.combo
  9  having sum (b.ctrl) = 3;

组合
--------------------------------------------
acd
abc
abd
bcd


--参考方法--
冲你这句谢谢,研究了下。很繁琐的实现方式
select * from (
select case when b ='g2' then  (
select g from
(
select g,rownum from (select case when b ='g1' then  (select a from bb where b is null)
--参考方法--
':'
--参考方法--
 a end  g from bb) f
 where g is not null
) g  where rownum=1)
--参考方法--
':'
--参考方法--
 a end ff

   from bb 
    union 
   select case when b ='g2' then  (
select g from
(
select g,rownum dd from (select case when b ='g1' then  (select a from bb where b is null)
--参考方法--
':'
--参考方法--
 a end  g from bb) f
 where g is not null
) g  where dd=2)
--参考方法--
':'
--参考方法--
 a end ff

   from bb) ggg where ff is not null
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:10:18
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/6488/
本文WWW.DOC100.NET DOC100.NET版权所有。