2014-12-04 111 views
0

我有以下查詢:sql中合併查詢結果

select 
    employee.last_name || ', ' || employee.first_name name, 
    job.title, 
    daystotime(time_sheet.finish_date_time - time_sheet.start_date_time) time 
from 
    employee 
inner join 
    employee_case on employee.employee_id = employee_case.employee 
inner join 
    time_sheet on time_sheet.employee_case = employee_case.employee_case_id 
inner join 
    job on employee.job = job.job_id 
where 
    employee_case.case = 1 
order by 
    employee.last_name; 

此給出以下結果:

enter image description here

不過,我需要的是能夠在時間欄的結合同一個員工給總時間。

我創建生成時間字段的功能是:

create or replace function DaysToTime(p_val in number) 
return varchar2 
is 
    l_days  number; 
    l_hours number; 
    l_minutes number; 
    l_seconds number; 
begin 
    l_days := p_val; 
    l_Hours := (l_days - trunc(l_days)) *24; 
    l_minutes := (l_hours - trunc(l_hours)) * 60; 
    l_seconds := (l_minutes - trunc(l_minutes)) * 60; 
return to_char(trunc(l_days), 'fm09') ||':'|| 
     to_char(trunc(l_hours), 'fm09') ||':'|| 
     to_char(trunc(l_minutes), 'fm09')||':'|| 
     to_char(trunc(l_seconds), 'fm09'); 
end; 

感謝所有幫助你可能給我這個,只是說,如果你需要內部的任何其他信息

回答

1

使用SUM您的功能+ GROUP BY:

select 
    employee.last_name || ', ' || employee.first_name name, 
    job.title, 
    daystotime(sum(time_sheet.finish_date_time - time_sheet.start_date_time)) time 
from 
    employee 
inner join 
    employee_case on employee.employee_id = employee_case.employee 
inner join 
    time_sheet on time_sheet.employee_case = employee_case.employee_case_id 
inner join 
    job on employee.job = job.job_id 
where 
    employee_case.case = 1 
group by employee.last_name, employee.first_name, 
     job.title 
order by 
    employee.last_name; 

PS在Oracle中有一個INTERVAL類型(也許你不需要你自己的功能):

select numtodsinterval(d2 - d1, 'day') from 
(select to_date('02 12:44:01', 'DDHH24:MI:SS') d1, 
     to_date('03 12:44:05', 'DDHH24:MI:SS') d2 
from dual) 
+0

感謝您的回覆。 「ORA-00979:不是GROUP BY表達式」 00979. 00000 - 「不是GROUP BY表達式」 *原因: *操作: 錯誤行:18列:5' – DaRoGa 2014-12-04 20:12:55

+0

@DaRoGa對不起,這是因爲ORDER BY。我已經更新了我的回答 – Multisync 2014-12-04 20:16:04

+0

這是完美的謝謝。你能不能給我解釋一下numtodsinterval函數?即它是如何工作的以及'一天'的目的是什麼? – DaRoGa 2014-12-04 20:17:57