解决方案 »
- 执行一个存储过程得到一个结果集,怎样对这个结果集进行再次筛选?
- DRG-10602: 无法将 DML 更改排成列 的问题
- 求一SQL语句,急!!!
- oracle中如何实现获取上次的更新时间?
- 表空间扩展问题
- PL/SQL下的输出问题,请教!
- oracle 不好用了,帮忙一下.
- 请问:我在用sqlplus连接库时,我随便输入了用户名和密码就登陆进去了(是用sysdba),那不有问题了,谁都能进去了??
- 为什么下面的语句不执行???
- oracle redolog的切换问题 Thread 1 cannot allocate new log
- Could not execute JDBC batch update
- 如何用oracle分割字符串啊?!!
门店,
case when 销售时间=2014年1月份 then sum(销售数量) as '2014年一月份',
case when 销售时间=2014年2月份 then sum(销售数量) as '2014年二月份',
case when 销售时间=2014年3月份 then sum(销售数量) as '2014年三月份'
from 表 group by...
第一步,获取时间列
select listagg(to_char(add_months(to_date('2014-01-01','yyyy-mm-dd'),rownum-1),'yyyy-mm'),',') within group(order by 1)from user_objects where rownum
<=months_between(to_date('2014-03-30','yyyy-mm-dd'),to_date('2014-01-01','yyyy-mm-dd'))+1
获得:'2014-01','2014-02','2014-03'第二步,使用pivot转换
with t as (
select 'code1' as md,'2014-1-1' as sj,1 as sl from dual
union select 'code1' ,'2014-1-2',1 from dual
union select 'code1' ,'2014-2-2',1 from dual
union select 'code2' ,'2014-2-2',2 from dual
union select 'code2' ,'2014-2-4',2 from dual
union select 'code1' ,'2014-3-1',2 from dual
union select 'code1' ,'2014-3-2',1 from dual
union select 'code2' ,'2014-3-2',1 from dual
)select * from (select to_char(to_date(t.sj,'yyyy-mm-dd'),'yyyy-mm') as ly,t.md,t.sl
from t)tmp
pivot(
sum(sl)
for ly
in('2014-01','2014-02','2014-03')
);获得如下结果:
MD '2014-01' '2014-02' '2014-03'
----- ---------------------- ---------------------- ----------------------
code1 2 1 3
code2 4 1
参考http://bbs.csdn.net/topics/330039676