原创文章,转载务必注明出处。
今天工作的时候,碰到一个问题,涉及oracle行转列,用了半小时解决,因此在这里写个博客记录一下解决办法。
原数据库表的数据是:
想要达到的效果是:
经过思考,这是一个oracle行转列的操作,根据xn,qxdm,nj这三列值来分组查询所有的数据,把xn,qxdm,nj三列相同的数据看为一行。
在百度上找了半小时sql,自己又调试了半个小时,终于把这个效果实现了,sql如下:
1 select * from (select xn,qxdm,nj,xk,gxsj,cbbb from test) t pivot(
2 max(t.cbbb) for xk in (
3 "道德与法制" as 道德与法制,
4 "语文" as 语文,
5 "数学" as 数学,
6 "音乐" as 音乐,
7 "美术" as 美术,
8 "科学" as 科学,
9 "英语" as 英语,
10 "书法" as 书法,
11 "信息技术" as 信息技术
12 ) ) where 1=1
核心是利用了oracle的pivot函数,问题至此解决,写下次过程以便他人参考。
原创文章,转载务必注明出处。