Oracle的行转列
发布时间:2020-12-12 14:14:39 所属栏目:百科 来源:网络整理
导读:一,简单的行转列 做项目的时候碰到一个需求,老板有三个门店,每个门店每天都有金额入账,现在想展示某一段时间每个门店的收入情况 原表的的结构 这里在sql里面处理就比较方便,只需用到sql的decode(),和sum()函数就可以实现 select d.md,sum(DECODE(rq,'
一,简单的行转列做项目的时候碰到一个需求,老板有三个门店,每个门店每天都有金额入账,现在想展示某一段时间每个门店的收入情况 原表的的结构 这里在sql里面处理就比较方便,只需用到sql的decode(),和sum()函数就可以实现 select d.md,sum(DECODE(rq,'星期一',je,null)) as monday,'星期二',null)) as tuesday,'星期三',null)) as wednesday,'星期四',null)) as thursday,'星期五',null)) as friday,'星期六',null)) as saturday,'星期天',null)) as Sunday from TESTHZL d GROUP BY d.md 效果 一小点扩展,如果需要统计这段时间的总收入 select t.*,t.monday+t.tuesday+t.wednesday+t.thursday+t.friday+t.saturday+t.Sunday count from ( select d.md,null)) as Sunday from TESTHZL d GROUP BY d.md)t 很简单就实现了 二,思考与扩展现在假如我们有一个需求,在某一年级,有三个班级,每个班级取总分前三的尖子生,比较每个班级的情况(与行转列无关的就不涉及了,例如怎么取班级分数前三的尖子生) 原始表字段结构 数据格式 SELECT class,max(decode(r,1,student,null)) student1,count,null)) count1,chinese,null)) chinese1,2,null)) student2,null)) count2,null)) chinese2,3,null)) student3,null)) count3,null)) chinese3 from ( select t.*,row_number() over(partition by class order by student ) r from CLASS_TOPSTUDENT t ) group by class 主要是max() over (PARTITION BY ...) 这个分析函数的应用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |