【发布时间】:2022-01-13 19:56:21
【问题描述】:
我在查询中使用不同的计算并将其组合以获得输出。查询有点像 -
select person_number,
sum(hours_spent),
sum(hours_amount),
hour_type,
sum(unpaid_spent),
sum(unpaid_amount),
unpaid_type
sum(total_amount_paid)
from
(
select calc_card.hours_spent,
calc_card.hours_amount,
calc_card.unpaid_spent,
calc_card.unpaid_amount,
calc_card.total_amount_paid,
calc_card.time_card_start_date,
papf.person_id person_number
from per_all_people_f papf,
calculations_time_spent calc_card
where papf.person_id = calc_card.person_id
and calc_card.Calculation_for = 'TimeSpent'
)
group by
person_number,
hour_type,
unpaid_type
UNION
select person_number,
sum(hours_spent),
sum(hours_amount),
hour_type,
sum(unpaid_spent),
sum(unpaid_amount),
unpaid_type
sum(total_amount_paid)
from
(
select calc_card.hours_spent,
calc_card.hours_amount,
calc_card.unpaid_spent,
calc_card.unpaid_amount,
calc_card.total_amount_paid,
calc_card.time_card_start_date,
papf.person_id person_number
from per_all_people_f papf,
calculations_time_spent DEcalc_card
where papf.person_id = calc_card.person_id
and calc_card.Calculation_for = 'ProcessedTimeSpent'
and DEcalc_card.absence_type in (select distinct absence_type from abs_table where absence_name like '%Premium%')
)
现在这给了我这样的输出 -
person_number hours_spent hours_amount hour_type unpaid_spent unpaid_amount unpaid_type total_amount_paid
1980 8 100 Manual 2 8 Computer 89
1980 8 100 Manual 1 10 Manual 90
1980 8 100 Manual
1981 9 60 Automatic 9 700 Manual 10
1981 9 60 Automatic 9 700 Manual 10
1981 9 60 Automatic 19 701 Withdrawn 10
那么对于一个人来说,如果 hours_spent 和 hours_amount 相同并且 unpaid_spent, unpaid_type 相同,那么它应该只在输出中出现一次。有点像 -
person_number hours_spent hours_amount hour_type unpaid_spent unpaid_amount unpaid_type total_amount_paid
1980 8 100 Manual 2 8 Computer 89
1980 Manual 1 10 Manual 90
1980 Manual
1981 9 60 Automatic 9 700 Manual 10
1981 Automatic Manual 10
1981 Automatic 19 701 Withdrawn 10
无论如何,这可以通过分区来实现吗?
【问题讨论】:
-
轻松为您提供帮助 - 简化! minimal reproducible example