今天群里市讨论一个列转行的问题,开始没有一点头绪的,后来有位大哥说到是列转行的问题,好像以前看到过就没没有仔细去看,又查了下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 谢谢!