使用WMSYS.WM_CONCAT实现行转列!

转自:http://blog.csdn.net/ziwen00/article/details/7870080

在BBS上面看到一个比较不错的行转列的问题,大致SQL如下:

  1. CREATE TABLE foo(  
  2.   fooid NUMBER(20),  
  3.   fooname VARCHAR2(20),  
  4.   foobar VARCHAR2(20)  
  5. );  
  6.   
  7. INSERT INTO foo VALUES('1','张三','a');  
  8. INSERT INTO foo VALUES('1','张三','b');  
  9. INSERT INTO foo VALUES('2','李四','a');  
  10. INSERT INTO foo VALUES('3','王五','a');  
  11. INSERT INTO foo VALUES('3','王五','b');  
  12. INSERT INTO foo VALUES('3','王五','c');  
  13.   
  14. SELECT * FROM foo;  


我当时以为,下面的sql是一个比较不错的答案:

 

  1. SELECT foo.fooid,foo.fooname,  
  2.      MAX(CASE WHEN foo.foobar='a' THEN foo.foobar ENDAS A,  
  3.      MAX(CASE WHEN foo.foobar='b' THEN foo.foobar ENDAS B,  
  4.      MAX(CASE WHEN foo.foobar='c' THEN foo.foobar ENDAS C  
  5. FROM foo  
  6. GROUP BY foo.fooid,foo.fooname  
  7. ORDER BY 1;  

 

但是看到别人的答案是这个:

 

  1. SELECT FOO.FOOID, FOO.FOONAME, WMSYS.WM_CONCAT(FOO.FOOBAR) BAR  
  2.   FROM FOO  
  3.  GROUP BY FOO.FOOID, FOO.FOONAME;  

 

于是知道了这个函数,具备行转列的作用,很是不错哦!使用WMSYS.WM_CONCAT 实现行转列。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值