Oracle sql窗口函数-与结果在同一行上的总计
我想使用窗口功能在同一行显示总(劳动力流动)和结果,但我无法使其正常工作。它在total_labour_Revolution一栏中的Oracle sql窗口函数-与结果在同一行上的总计,sql,oracle,Sql,Oracle,我想使用窗口功能在同一行显示总(劳动力流动)和结果,但我无法使其正常工作。它在total_labour_Revolution一栏中的over子句中给出了“from关键字未找到期望的位置” 基本上,我希望显示总的劳动力流动率以及各行的劳动力流动率。请注意,我不想要一个运行总数 有人知道怎么做吗 select active.cost_centre, active.flexi_perm, active.active_count, nvl(term.term_c
over
子句中给出了“from关键字未找到期望的位置”
基本上,我希望显示总的劳动力流动率以及各行的劳动力流动率。请注意,我不想要一个运行总数
有人知道怎么做吗
select active.cost_centre,
active.flexi_perm,
active.active_count,
nvl(term.term_count, 0) term_count,
round(nvl(term.term_count, 0) / active.active_count * 100, 2) labour_turnover,
round(sum(nvl(term.term_count, 0)) / sum(active.active_count) * 100, 2) over (order by 1) total_labour_turnover
from (
select haou.name cost_centre,
decode(payr.attribute2, 'F', 'Flexi', 'Perm') flexi_perm,
count(paaf.assignment_id) active_count
from per_periods_of_service ppos,
per_all_assignments_f paaf,
hr_organization_information hoi,
hr_all_organization_units haou,
pay_all_payrolls_f payr
where trunc(:active_count_date) between ppos.date_start and nvl(ppos.actual_termination_date, to_date('31/12/4712', 'dd/mm/yyyy'))
and paaf.period_of_service_id = ppos.period_of_service_id
and paaf.primary_flag = 'Y'
and trunc(:active_count_date) between paaf.effective_start_date and paaf.effective_end_date
and hoi.org_information_context = 'TRU_ADD_ORG'
and hoi.organization_id = paaf.organization_id
and haou.organization_id = paaf.organization_id
and payr.payroll_id = paaf.payroll_id
and payr.attribute2 in ('F', 'N') -- Flexi and Non-Flexi
and trunc(:active_count_date) between payr.effective_start_date and payr.effective_end_date
group by haou.name,
decode(payr.attribute2, 'F', 'Flexi', 'Perm')
) active,
(
select haou.name cost_centre,
decode(payr.attribute2, 'F', 'Flexi', 'Perm') flexi_perm,
count(distinct paaf.person_id) term_count
from per_periods_of_service ppos,
per_all_assignments_f paaf,
hr_organization_information hoi,
hr_all_organization_units haou,
pay_all_payrolls_f payr
where nvl(ppos.actual_termination_date, to_date('31/12/4712', 'dd/mm/yyyy')) between trunc(:term_start) and trunc(:term_end)
and paaf.period_of_service_id = ppos.period_of_service_id
and paaf.primary_flag = 'Y'
and nvl(ppos.actual_termination_date, to_date('31/12/4712', 'dd/mm/yyyy')) between paaf.effective_start_date and paaf.effective_end_date
and hoi.org_information_context = 'TRU_ADD_ORG'
and hoi.organization_id = paaf.organization_id
and haou.organization_id = paaf.organization_id
and payr.payroll_id = paaf.payroll_id
and payr.attribute2 in ('F', 'N') -- Flexi and Non-Flexi
and nvl(ppos.actual_termination_date, to_date('31/12/4712', 'dd/mm/yyyy')) between payr.effective_start_date and payr.effective_end_date
group by haou.name,
decode(payr.attribute2, 'F', 'Flexi', 'Perm')
) term
where term.cost_centre (+) = active.cost_centre
and term.flexi_perm (+) = active.flexi_perm
根据Oracle关于分析函数的文档,
order by
子句自动意味着在无界的前一行和当前行之间有一个运行的行窗口
如果您不想要运行的求和,而是求和总数,请从分析的sum()
函数的over
子句中删除orderby1
,并将按null划分。或者用空括号试试,也可能有用。请尝试以下方法,它应该会有帮助:
round(sum(nvl(term.term_count, 0)) over() / sum(active.active_count) over() * 100, 2) total_labour_turnover
表达式中有两个和函数,它们都需要是解析函数