create table T_SJCJ_ZZKTJ         装置开停机表
(
  ID    NUMBER not null,          记录编号,自增字段
  DW    VARCHAR2(20) not null,    单位编码
  SCXBM VARCHAR2(20),             生产线编码
  KSSJ  VARCHAR2(18),             开始时间
  JSSJ  VARCHAR2(18),             结束时间
  ZT    VARCHAR2(1) default '0' not null,状态:''1''表示开机;''0''表示停机
  JYSM  VARCHAR2(100),            停机原因简要说明
  TJYY  VARCHAR2(2)               停机原因
)
这是装置开停工表,记录装置的开始和停止的时间状态信息
我想做一个视图,显示每个生产线每天的开机时间和停机时间
视图的列应该有: 单位编码,生产线编码,日期,开机时间,停机时间
注:一个单位有多条生产线,开机状态和停机状态交替

解决方案 »

  1.   

    select dw,scxbm,max(kaiji),max(tingji) from
    (select dw,scxbm,sum(kssj-jssj) kaiji,null tingji from T_SJCJ_ZZKTJ 
    where zt = '1' group by dw,scxbm
    union
    select dw,scxbm,null kaiji,sum(kssj-jssj) tingji from T_SJCJ_ZZKTJ 
    where zt = '0' group by dw,scxbm)
    group by dw,scxbm
      

  2.   

    是计算每天的开机时间和停机时间
    举个例子:
    ID(编号) DW(单位) SCXBM(生产线) KSSJ(开始时间)     JSSJ(结束时间)       ZT(状态)
    1        单位1    单位1生产线1  2006-12-26 22:00   2006-12-27 08:00     0
    2        单位1    单位1生产线1  2006-12-27 08:00   2006-12-27 17:00     1
    3        单位1    单位1生产线1  2006-12-27 17:00   2006-12-27 23:00     0
    4        单位1    单位1生产线1  2006-12-27 23:00   2006-12-28 09:00     1
    结果
    DW(单位) SCXBM(生产线) DATE(日期) KJSJ(开机时间) TJSJ(停机时间)
    单位1    单位1生产线1  2006-12-27 600            840
    注:1.编号为2的数据 17:00-08:00=540分钟 + 编号为4的数据 00:00-23:00=60分钟 总合为600
       2.还有其它的单位和生产线.
      

  3.   

    你所要的都是状态为1的,在一天的所用时前:
     这个可能要写在一个游标里,因为视图不提供GROUP BY 功能
      

  4.   

    select dw,scxbm,date,sum(kaiji),1440-sum(kaiji) 
    from
    (
    select dw,scxbm,to_char(kssj,'yyyy-mm-dd') date, (kssj-jssj)*24*60 kaiji from T_SJCJ_ZZKTJ 
    where zt = '1' and to_char(kssj,'yyyy-mm-dd') = to_char(jssj,'yyyy-mm-dd')
    union
    select dw,scxbm,to_char(kssj,'yyyy-mm-dd') date, (to_date(to_char(kssj,'yyyy-mm-dd')||' 23:59:59','yyyy-mm-dd hh24:mi:ss')-kssj)*24*60+1 kaiji from T_SJCJ_ZZKTJ 
    where zt = '1' and to_char(kssj,'yyyy-mm-dd') < to_char(jssj,'yyyy-mm-dd')
    union
    select dw,scxbm,to_char(jssj,'yyyy-mm-dd') date, (jssj-to_date(to_char(jssj,'yyyy-mm-dd')||' 00:00:00','yyyy-mm-dd hh24:mi:ss'))*24*60 kaiji from T_SJCJ_ZZKTJ 
    where zt = '1' and to_char(kssj,'yyyy-mm-dd') < to_char(jssj,'yyyy-mm-dd')
    ) a
    group by dw,scxbm,date