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  谢谢!

你可能感兴趣的:(oracle,C++,c,C#,Blog)