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 致远钓客 阅读(1406) 评论(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 (仅博主可见) 
验证码 *  验证码看不清,换一张
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论   新用户注册   返回页首      

导航: 网站首页 社区 新闻 博问 闪存 网摘 招聘 .NET频道 知识库 找找看 Google站内搜索



China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务

相关文章:

相关链接:
 

导航

公告

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

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

Google
 

与我联系

搜索

 

常用链接

留言簿

随笔分类

随笔档案

文章分类

相册

最新评论

阅读排行榜

评论排行榜