Я пишу запрос, чтобы получить информацию о преимуществах сотрудников. Мне нужно получить сумму вычетов разных планов и вариантов. Для суммы вычета в таблице есть одно поле. Я собираю это поле несколько раз для разных планов и вариантов. Я сделал это с помощью подзапросов. Но мой запрос возвращает несколько строк одного сотрудника, а в нескольких строках отображает его количество. Я хочу, чтобы все суммы вычетов были в одной строке для одного сотрудника.Получение нескольких строк одного сотрудника при использовании подзапросов в SQL
Это, как я написал запрос: -
select papf.person_number, csv.salary_amount, (select bprv.rt_val from ben_prtt_rt_val bprv,
ben_opt_f bof,
ben_pl_f bpf,
ben_pl_typ_f bpt where bprv.prtt_enrt_rslt_id=bper.prtt_enrt_rslt_id and bper.pl_typ_id=bpt.pl_typ_id and bpf.pl_typ_id=bpt.pl_typ_id and bper.pl_id=bpf.pl_id and bper.opt_id=bof.opt_id and bpt.name ='abcd' and bpf.name='abcd' and bof.name='Participant'
and (sysdate between bof.effective_start_Date and bof.effective_end_Date)
and (sysdate between bpt.effective_start_Date and bpt.effective_end_Date)
and (sysdate between bpf.effective_start_Date and bpf.effective_end_Date)) as "abcd Amount",
(select bprv1.rt_val from ben_prtt_rt_val bprv1,ben_opt_f bof1,
ben_pl_f bpf1,
ben_pl_typ_f bpt1 where bprv1.prtt_enrt_rslt_id=bper.prtt_enrt_rslt_id and bper.pl_typ_id=bpt1.pl_typ_id and bpf1.pl_typ_id=bpt1.pl_typ_id and bper.opt_id=bof1.opt_id and bper.pl_id=bpf1.pl_id and bpt1.name ='efgh' and bpf1.name='efgh' and bof1.name='Participant'
and (sysdate between bof1.effective_start_Date and bof1.effective_end_Date)
and (sysdate between bpt1.effective_start_Date and bpt1.effective_end_Date)
and (sysdate between bpf1.effective_start_Date and bpf1.effective_end_Date)) as "efgh Amount",
(select bprv2.rt_val from ben_prtt_rt_val bprv2,ben_opt_f bof2,
ben_pl_f bpf2,
ben_pl_typ_f bpt2 where bprv2.prtt_enrt_rslt_id=bper.prtt_enrt_rslt_id and bper.pl_typ_id=bpt2.pl_typ_id and bpf2.pl_typ_id=bpt2.pl_typ_id and bper.opt_id=bof2.opt_id and bper.pl_id=bpf2.pl_id and bpt2.name ='ijkl' and bpf2.name='ijkl' and bof2.name='Participant'
and (sysdate between bof2.effective_start_Date and bof2.effective_end_Date)
and (sysdate between bpt2.effective_start_Date and bpt2.effective_end_Date)
and (sysdate between bpf2.effective_start_Date and bpf2.effective_end_Date)) as "ijkl Amount"
from
ben_prtt_enrt_rslt bper,
per_all_people_f papf ,
cmp_salary csv
where
bper.assignment_id=csv.assignment_id
and bper.person_id=papf.person_id
and (sysdate between papf.effective_start_Date and papf.effective_end_Date)
AND CSV.DATE_TO=(SELECT MAX(CSV1.DATE_TO) FROM CMP_SALARY CSV1 WHERE CSV.ASSIGNMENT_ID=CSV1.ASSIGNMENT_ID)
Я хочу результат, как это: -
Employee Salary abcd_amt efgh_amt ijkl_amt
1234 10000 200 300 400
Но с помощью запроса я получаю результат, как это: -
Employee Salary abcd_amt efgh_amt ijkl_amt
1234 10000 200
1234 10000 300
1234 10000 400
а также повторяющиеся строки.
Пожалуйста, помогите мне. Как я могу решить эту проблему?
вы можете добавить свои макеты таблицы и некоторые данные? Я думаю, что это можно сделать легко с помощью соединений, но на самом деле не очень хорошо понимают, как выглядят ваши таблицы. –
Мне кажется, что вы должны группировать свои данные на основе сотрудника. Таким образом, вы получите одну строку на одного сотрудника – istovatis