oracle列转行的问题

今天群里市讨论一个列转行的问题,开始没有一点头绪的,后来有位大哥说到是列转行的问题,好像以前看到过就没没有仔细去看,又查了下je里面的贴子,找到了解决的办法如下:

现有两张表,分别为 A_table,B_table
分别存储数据如下:
A_table

id name
1  zhang
2  li
3  wang

B_table

id  type  value
1   a     1
1   b     2
2   c     2
3   b     1
3   d     3

现在问题是 如何能实现如下显示
id name   a   b   c   d
1  zhang  1   2
2  li             2
3  wang       1       3

如:decode(ex1,ex2,ex3,ex4); [这里的ex1 ,ex3代表的是列,ex2代表的是列的值,ex4代表的自定义值]

表示:将ex1列里的值和ex2列的值进行比较,如果相同,则反回对应ex1某列的行的ex3列的值,不同则返回ex4 ,如果数据固定,ex4可以省略,if....exle语句 如果ex1的值=ex2则返回ex3,否则返回ex4


select id ,name,max(decode(B_table.type,'a',B_table.value)) as a,
                max(decode(B_table.type,'b',B_table.value)) as b,
                max(decode(B_table.type,'c',B_table.value)) as c,
                max(decode(B_table.type,'d',B_table.value)) as d
from A_table,B_table
where A_table.id = B_table.id
group by A_table.id,A_table.name;

 

没有测试,应该不会错。

参考引用的博客:http://hongyangname.iteye.com/blog/674609  谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值