我有一个表,查询就像这样
SELECT
cost_center_name,
person_number,
person_full_name,
TO_DATE(TO_CHAR(wfc_start_date,'DD-MON-YYYY HH:MI:SS AM'),'DD-MON-YYYY HH:MI:SS AM') start_date,
TO_DATE(TO_CHAR(wfc_end_date,'DD-MON-YYYY HH:MI:SS AM'),'DD-MON-YYYY HH:MI:SS AM') end_date,
TO_CHAR(wfc_start_date,'DD-MON-YYYY HH:MI:SS AM') start_date_hours,
TO_CHAR(wfc_end_date,'DD-MON-YYYY HH:MI:SS AM') end_date_hours,
pay_code_name,
duration_dd_hh_mi_ss,
wage_amount,
FROM
XX_pay_type a
WHERE
person_number IN (
'102',
'103'
)
AND pay_period_ending_date = '20-APR-2019'
lisation_dd_hh_mi_ss, 具有00:4:32:00之类的值 00:3:20:00
我想要sql查询的总和(wage_amount(和sum(duration_dd_hh_mi_ss(反对person_number我也想要grand_total(wage_amount(
sum(duration_dd_hh_mi_ss(将在这种情况下00:7:52:00
我尝试了sum(wage_amount((person_number的分区(但是我无法获得对person_number和grand(wage_total(
如果duration
是end_date
和start_date
的缩写,则使用sudstraction。不要遵循第一步。
1
否则使用to_dsinterval((。但是,要能够使用它,我们需要用空间中的duration
中的第一个:
,因为to_dsinterval
不接受此参数。
select regexp_replace('00:2:32:00', ':', ' ', 1, 1) from dual; --> 00 2:32:00
select to_dsinterval(regexp_replace('00:2:32:00', ':', ' ', 1, 1)) from dual;
现在,我们有一些努力可以概括的间隔。这不是微不足道的,但可能是可能的。字符串不能。
2
要在一个查询中获得部分总和和总计,请使用cube
,rollup
或grouping sets
的聚合。这是rollup
的示例:
-- sample data
with t(center, id, name, duration, wage_amount) as (
select 'C1', '102', 'Tim', '01:2:00:00', 80 from dual union all
select 'C1', '102', 'Tim', '00:0:32:00', 70 from dual union all
select 'C2', '102', 'Tim', '00:2:00:00', 100 from dual union all
select 'C2', '103', 'Bob', '00:2:00:00', 120 from dual )
-- end of sample data
查询:
select center, id, name, sum(wage_amount) amt,
numtodsinterval(sum(sysdate + to_dsinterval(regexp_replace(duration, ':', ' ', 1, 1))
- sysdate ), 'day') duration
from t
group by rollup((id, name), center)
结果:
CENTER ID NAME AMT DURATION
------ --- ---- ---------- -------------------
C1 102 Tim 150 +000000001 02:32:00
C2 102 Tim 100 +000000000 02:00:00
102 Tim 250 +000000001 04:32:00
C2 103 Bob 120 +000000000 02:00:00
103 Bob 120 +000000000 02:00:00
370 +000000001 06:32:00
您也可以使用分析总和来完成此操作,从而为您提供其他列中的值。或对数据和分组查询进行联合(union all
(。
' duration_dd_hh_mi_ss
'列的数据类型是什么?