आप एक से ज़्यादा वर्चुअल टेबल बना सकते हैं CTE परिभाषाओं को अल्पविराम से अलग करके CTE के साथ। इसके अलावा, सीटीई अन्य सीटीई को संदर्भित कर सकते हैं।
मान लें कि ep
इन सभी प्रश्नों में समान है, आप कुछ ऐसा कर सकते हैं:
with ep as
(select emp_cd,
emp_num,
to_char(pay_dt,'yyyymm') as pay_month,
max(code),
max(bill) as bill,
max(chrg) as charge,
sum( nvl(pay_1,0)) sum_pay1,
sum(nvl(pay_2, 0)) sum_pay2,
(chrg_mon*22)+ (chrg_week*5)+ chrg_day as days,
from emp_payments
where emp_cd in ('HP','2000')
and code in ('X','Y','Z')
group by emp_cd,
emp_num,
to_char(pay_dt,'yyyymm'),
code
),
chrg_orig (<field names here>) as (
select emp_cd,
emp_num,
pay_month,
max(code),
sum(bill)
case when sum(days)=22 then sum(chrg) else round((round(sum(chrg)/sum(days),4)*22),2) end as chrg_orig
from ep
where chrg <>0
group by
emp_cd,
emp_num,
paymonth
),
rate_chrg (<field names here>) as (
select a.emp_cd,a.emp_num,a.key,b.rate as rate_chrg from
(select emp_cd,emp_num,to_char(pay_dt,'yyyymm') as key,max(invc_dt) as invc_dt from ep
where code in ('X','Y') and rate <> 0
group by emp_cd,emp_num,to_char(invc_dt,'yyyymm')) a,
(select emp_cd,emp_num,to_char(pay_dt,'yyyymm') as key,invc_dt,rate from ep
where code in ('X','Y') and rate <> 0) b
where a.emp_cd = b.emp_cd
and a.emp_num = b.emp_num
and a.key = b.key
and a.invc_dt = b.invc_dt
),
bonus_chrg (<field names here>) as (
select a.emp_cd,a.emp_num,a.key,b.rate as bonus_chrg from
(select emp_cd,emp_num,to_char(pay_dt,'yyyymm') as key,max(invc_dt) as invc_dt from ep
where code in ('Z') and rate <> 0
group by emp_cd,emp_num,to_char(invc_dt,'yyyymm')) a,
(select emp_cd,emp_num,to_char(pay_dt,'yyyymm') as key,invc_dt,rate from ep
where code in ('Z') and rate <> 0) b
where a.emp_cd = b.emp_cd
and a.emp_num = b.emp_num
and a.key = b.key
and a.invc_dt = b.invc_dt
),
comp_days (<field names here>) as (
select emp_cd,emp_num,paymonth as key,sum(days) as comp_days from ep
where code in ('X','Y')
group by emp_cd,emp_num,key
)
SELECT *
FROM ep
LEFT OUTER JOIN chrg_orig
ON <JOIN CONDITION>
LEFT OUTER JOIN rate_chrg
ON <JOIN CONDITION>
LEFT OUTER JOIN bonus_chrg
ON <JOIN CONDITION>
LEFT OUTER JOIN comp_days
ON <JOIN CONDITION>