Oracle:一条SQL实现将多行数据并为一行显示

家庭信息表:
ID  学生姓名   成员姓名
1    张三           成员1
2    张三           成员2
3    李四           成员1
4    李四           成员2


现在要显示为:
学生姓名   成员姓名1   成员姓名2
张三           成员1            成员2
李四           成员1            成员2

代码如下:

select 档案编号,
        max(decode(my_seq,1,成员姓名)) 成员姓名1,
        max(decode(my_seq,1,与本人关系)) 与本人关系1,       
        max(decode(my_seq,2,成员姓名)) 成员姓名2,
        max(decode(my_seq,2,与本人关系)) 与本人关系2        
  from (
       select 档案编号,
          成员姓名,
          与本人关系,
          row_number() over
           (partition by 档案编号 order by 成员姓名) my_seq
       from v_insch_familyInfo Where 导入编号 = 17
       )
group by 档案编号
 

这只是一种方法,有那位朋友有更好的方法,欢迎多多交流。

posted on 2006-06-17 19:19 致远钓客 阅读(1220) 评论(2)  编辑 收藏 所属分类: SQL语言

评论

#1楼  2006-06-17 23:34 迷途小猪儿      

如果最多就2个家庭成员的话我觉得可以加一个列 用来存该学生的第几个家庭成员
ID 学生姓名 成员姓名 成员顺序号
1 张三 成员1 1
2 张三 成员2 2
3 李四 成员1 1
4 李四 成员2 2

然后就可以这样来用了

select t.id,t1.成员姓名,t1.与本人关系,t2.成员姓名,t2.与本人关系
from 学生信息 t
left outer join 成员信息 t1 on t.id=t1.学生id and t1.成员顺序号=1
left outer join 成员信息 t2 on t.id=t2.学生id and t2.成员顺序号=2

不知道效率如何,感觉比较好理解
  回复  引用  查看    

#2楼  2007-03-21 10:19 闪电侠 [未注册用户]


  回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接:
 


导航

公告

致远钓客
QQ:382875863
E-mail:Vicker109#Gmail.com
MSN:vicker179#hotmail.com
我的视频收藏:http://blog.ku6.com/1954466/video

欢迎博友们与我多多交流,探讨IT技术,共创Web大业。

Google
 

与我联系

搜索

 

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

相册

最新评论

阅读排行榜

评论排行榜