如果你的createtime和endtime是date类型的话(如果不是要用to_date转化一下数据类型),借鉴下面代码。 select epqname, sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.10.01' then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.10.01", sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.10.27' then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.10.27", sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.11.11' then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.11.11", sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.11.29' then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.11.29" from tabl1 t group by epqname order by epqname;
一、不确定列直接查询是没办法实现的提供两个方案 1、动态拼接sql语句,然后生成视图,然后select * from 视图 2、动态拼接sql语句,利用游标,将结果循环打印输出二、存在跨天的情况,需要进行拆分 用下面的语句的查询结果代替原表,未测试,你先执行下看看效果吧 select epqname, greatest(trunc(createtime)+level-1,createtime) createtime, least(trunc(createtime)+level,endtime) endtime from tabl1 connect by trunc(createtime)+level-1<=trunc(endtime) and rowid=prior rowid and prior dbms_random.value is not null
select epqname,
sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.10.01'
then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.10.01",
sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.10.27'
then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.10.27",
sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.11.11'
then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.11.11",
sum(case when to_char(t.createtime,'yyyy.mm.dd')='2014.11.29'
then ceil((t.endtime-t.createtime)*24) else 0 end) "2014.11.29"
from tabl1 t
group by epqname
order by epqname;
1、动态拼接sql语句,然后生成视图,然后select * from 视图
2、动态拼接sql语句,利用游标,将结果循环打印输出二、存在跨天的情况,需要进行拆分
用下面的语句的查询结果代替原表,未测试,你先执行下看看效果吧
select epqname,
greatest(trunc(createtime)+level-1,createtime) createtime,
least(trunc(createtime)+level,endtime) endtime
from tabl1
connect by trunc(createtime)+level-1<=trunc(endtime)
and rowid=prior rowid
and prior dbms_random.value is not null
EQPNAME 2014.11.27
设备01 1
类似这样的效果,显示每天、每设备的运行小时数的
参考3#固定列数的sql写法,拼接sql语句,然后动态创建视图,然后select * from 视图
oracle行转列(动态行转不定列)目前的oracle版本里没有任何可以直接的行转动态列方法,只能借助视图、游标之类的工具间接实现
如果从xml中select 可以借助pivot any的写法实现