hello,大家好。
数据库中查出来的结果表为:
No Value Code
1 20 A1
2 30 A2
3 21 A1
4 26 A2要在新表中实现的结果为:
........ A1 A2 ......
........ 20 30 ......
........ 21 26 ......问题如下:
(1)是否可用sql实现?我的一个师兄说不能用sql实现。
(2)如若不能用sql实现,用程序该怎么实现呢?
数据库中查出来的结果表为:
No Value Code
1 20 A1
2 30 A2
3 21 A1
4 26 A2要在新表中实现的结果为:
........ A1 A2 ......
........ 20 30 ......
........ 21 26 ......问题如下:
(1)是否可用sql实现?我的一个师兄说不能用sql实现。
(2)如若不能用sql实现,用程序该怎么实现呢?
select No,max(decode(code,'A1',value,null)) A1,
max(decode(code,'A2',value,null)) A2
from tablename
group by No
decode(code,A1,value) A1,decode(code,B1,value) B1
2 30 A2
3 21 A1
4 26 A2在新表里要放成横的话,照你的样子
........ A1 A2 ......
........ 20 30 ......
........ 21 26 ......
原表里的第一行的20 和第二行的30 放在一行是根据什么判定的,每二行转一次?还是根据别的什么ID来关联的。
表1为Table1,省略号代表Table1还有很多的行数据。
No Value Code
1 20 A1
2 30 A2
3 21 A1
4 26 A2
. . .
. . .
. . .
. . .
需要将Table1经过Sql处理后,变成下面的结果,原来Table1中的code字段列下面A1,A2等内容变成了新表中的列,相当于是行转换成列,比如,A1变成了新的一列,A1下的内容为在Table1中A1对应的value的值,同样A2变成了新的一列,A2下的内容为在Table1中A2对应的value的值,同理,A3,A4,A5.......... A1 A2 ......
......20 30 ......
......21 26 ......
..................
...................刚才第一次问问题的时候,问题没有表达清楚,不知道这次是否清楚了。
2楼的代码学习了呀,如果,按照现在的表述,Table1中的code字段下面的A1,A2,A3......在行列转换的时候应该怎么取得呢?
我写过一篇笔记 是行转列的 里面是以学生,课程,和成绩为例实现的,你可以参考下
http://lizhiyu.javaeye.com/blog/752453