oracle多行转多列

 我来答
longrenyingdc8ecb1
2014-09-17 · TA获得超过1万个赞
知道大有可为答主
回答量:6032
采纳率:82%
帮助的人:2362万
展开全部
你这个应该是一张通用的表吧,就是说下面还有可能出现,诸如ID=10002或者10003等。
如果这样的话,就用row_number()over(partition by ID),进行排序,然后把排序后的再进行转换。
比如上面这个就是
select row_number()over(partition by ID) id_id,id,countnum from table
这样会出来结果,如下
id_id id countnum
1 10001 30
2 10001 40
3 10001 50
1 10002 20
2 10002 50
3 10002 30
上面的结果没有排序,也可以按照countnum进行排序,就是在partition by id的后面加一个orderby,看你用不用了。
然后再对这个结果进行行列转换,用case when就行,我假设上张表取别名为a
那么
select id,(case when id_id=1 then countnum end) column1,,(case when id_id=2 then countnum end) column2,(case when id_id=3 then countnum end) column3,(case when id_id=4 then countnum end) column3,........from a
不过这种写法有一个问题,就是必须写一个最长的,不然你就有数据不能显示出来。
如果只有一个10001,那么可以利用rownum直接编组。
追问

执行您的sql语句得到

但我想要的效果是这样:  求大神解答

追答
再group by sum一下不就出来了。
类似: sum((case when id_id=1 then countnum end)) column1。。。。。。。后面再group by id不就行了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式