假设table a table b table c 
  其中col2是某个人的帐号,date1 为每次开始工作时间,date2为每次结束工作时间
假设值分别为   1,2,3
table a 
  
  col1 (varchar),col2 (varchar)(某个人的帐号),col3 (varchar),col4 (varchar),date1 (date),date2 (date)   'recno12'    'wong'   'co3'  'co3'     2009-09-03,    2009-10-03,
'recno13'    'fu'   'co3'  'co3'     2009-09-03,    2009-10-03,
'recno13'    'yang'   'co3'  'co3'     2009-06-03,    2009-10-03,其实 不止这些记录
table b   col1 (varchar),col2 (varchar),col3 (varchar),col4 (varchar),date1 (date),date2 (date) 'recno12'    'wong'   'co3'  'co3'     2009-09-03,    2009-10-03,
'recno13'    'fu'   'co3'  'co3'     2009-09-03,    2009-10-03,
其实 不止这些记录
table c col1 (varchar),col2 (varchar),col3 (varchar),col4 (varchar),date1 (date),date2 (date)
'recno12'    'wong'   'co3'  'co3'     2009-09-03,    2009-10-03,
'recno13'    'fu'   'co3'  'co3'     2009-09-03,    2009-10-03,
'recno13'    'xue'   'co3'  'co3'     2009-06-03,    2009-10-03,
其实 不止这些记录其三个表假设通过col1,col2 来连接
比如:select a. from a ,b,c where a.col1 = b.col1 and b.col1 = c.col1现在我要得结果是:要统计某个人 col2在a表中 (date1-date2)的和
在b表中 (date1-date2)的和
在c表中 (date1-date2)的和注意帐号在a表中有记录但是在b表或者c表中不一定有记录帐号 a中的工作时间的和sum(date1-date2), b中的工作时间的和sum(date1-date2), c中的工作时间的和sum(date1-date2)
比如:下面的数值:
wong       1 ,2 1,1 
fu         2,2,2yang        1,0,0
xue          0,0,10
怎样用一条语句来实现呢???

解决方案 »

  1.   

    假设table a table b table c 
      其中col2是某个人的帐号,date1 为每次开始工作时间,date2为每次结束工作时间 table a 
      
      col1 (varchar),col2 (varchar)(某个人的帐号),col3 (varchar),col4 (varchar),date1 (date),date2 (date)   'recno12'    'wong'  'co3'  'co3'    2009-09-03,    2009-10-03, 
    'recno13'    'fu'  'co3'  'co3'    2009-09-03,    2009-10-03, 
    'recno13'    'yang'  'co3'  'co3'    2009-06-03,    2009-10-03, 其实 不止这些记录 
    table b   col1 (varchar),col2 (varchar),col3 (varchar),col4 (varchar),date1 (date),date2 (date) 'recno12'    'wong'  'co3'  'co3'    2009-09-03,    2009-10-03, 
    'recno13'    'fu'  'co3'  'co3'    2009-09-03,    2009-10-03, 
    其实 不止这些记录 
    table c col1 (varchar),col2 (varchar),col3 (varchar),col4 (varchar),date1 (date),date2 (date) 
    'recno12'    'wong'  'co3'  'co3'    2009-09-03,    2009-10-03, 
    'recno13'    'fu'  'co3'  'co3'    2009-09-03,    2009-10-03, 
    'recno13'    'xue'  'co3'  'co3'    2009-06-03,    2009-10-03, 
    其实 不止这些记录 其三个表假设通过col1,col2 来连接 
    比如: select a. from a ,b,c where a.col1 = b.col1 and b.col1 = c.col1 现在我要得结果是: 要统计某个人 col2 在a表中 (date1-date2)的和 
    在b表中 (date1-date2)的和 
    在c表中 (date1-date2)的和 注意帐号在a表中有记录但是在b表或者c表中不一定有记录 帐号 a中的工作时间的和sum(date1-date2), b中的工作时间的和sum(date1-date2), c中的工作时间的和sum(date1-date2) 
    比如:下面的数值: 
    wong      1 ,2 1,1 
    fu        2,2,2 yang        1,0,0 
    xue          0,0,10 
    怎样用一条语句来实现呢??? 
      

  2.   

    提供你几个技术点
    1、a表有,b表,c表不一定有  用左连接
    2、时间差 用减法即可
    3、 形成1 ,2 1,1这样的结果集 用sys_connect_by 
      

  3.   

    So easy..
    code as following:select distinct col2,sum(data2 - data1) over(partition by col2) total_work_time,
    sum(data2*flag1 - data1*flag1) over(partition by col2) a_work_time,
    sum(data2*flag2 - data1*flag2) over(partition by col2) b_work_time,
    sum(data2*flag3 - data1*flag3) over(partition by col2) c_work_time from
    (select a.*,1 flag1,0 flag2,0 flag3 from a
    union select b.*,0 flag1,1 flag2,0 flag3 from b
    union select c.*,0 flag1,0 flag2,1 flag3 from c);