解决方案 »

  1.   

    ceil(to_number(endtime -createtime)*24)
      

  2.   

    如果你的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;
      

  3.   

    一、不确定列直接查询是没办法实现的提供两个方案
    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
      

  4.   

    不行啊,效果不一致啊,不是日期作为动态列啊能达到
    EQPNAME           2014.11.27    
    设备01                         1
    类似这样的效果,显示每天、每设备的运行小时数的
      

  5.   

    动态行转不定列的方法,在9#已经说明,采用视图实现的方式可以参考下面链接,大同小异
    参考3#固定列数的sql写法,拼接sql语句,然后动态创建视图,然后select * from 视图
    oracle行转列(动态行转不定列)目前的oracle版本里没有任何可以直接的行转动态列方法,只能借助视图、游标之类的工具间接实现
    如果从xml中select 可以借助pivot any的写法实现