Как рассчитать сумму псевдонимов всех итогов в динамическом sql (Oracle) - PullRequest
0 голосов
/ 25 октября 2019

Как вычислить сумму всех сумм псевдонимов динамического SQL в Oracle. У меня четыре квартала q1..q4, и данные за каждый квартал рассчитываются с использованием запроса. Всего 4 запроса. У каждого квартала своя сумма. Теперь 5-й запрос необходим для вычисления суммы всех данных за 4 квартала в Oracle в динамическом SQL.

Ниже приведен код за 1 квартал и то, что я делал до сих пор. есть другие запросы для других кварталов.

v_q1 - запрос за квартал - 1

v_q1 := 'sum (case when a.sales_incentive in (''Yes'',''Y'') and a.q1_ote is not null then
    1 else 0 end) as associates_si,
   sum(case
         when a.sales_incentive in (''Yes'',''Y'') then
          q1_ote_ctc_maj_cur
         else
          0
       end) prorated_ote_si,

    sum(case
         when a.sales_incentive in (''Yes'',''Y'') then
          q1_etd_payt_ctc_maj_cur
         else
          0
       end) as estimated_payout_si,

        sum (case when a.mandatory_bonus in (''Yes'',''Y'') then
       1 else 0 end) as associates_mb,

     sum(case
         when a.mandatory_bonus in (''Yes'',''Y'') then
          q1_ote_ctc_maj_cur
         else
          0
       end) prorated_ote_mb  ,


   sum(case
         when a.mandatory_bonus in (''Yes'',''Y'') then
          q1_etd_payt_ctc_maj_cur
         else
          0
       end) as estimated_payout_mb,


      sum (case when a.discretionary in (''Yes'',''Y'') then
    1 else 0 end) as associates_di,

   sum(case
         when a.discretionary in (''Yes'',''Y'') then
          q1_ote_ctc_maj_cur
         else
          0
       end) prorated_ote_di,

    sum(case
         when a.discretionary in (''Yes'',''Y'') then
          q1_etd_payt_ctc_maj_cur
         else
          0
       end) as estimated_payout_di,


   sum(case
         when a.discretionary in (''Yes'',''Y'') then
          q1_etd_payt_rvsd_ctc_maj_cur
         else
          0
       end) as revised_estimated_payout_di,

( sum(case
         when a.discretionary in (''Yes'',''Y'') then
          q1_etd_payt_rvsd_ctc_maj_cur
         else
          0
       end) +

sum(case
         when a.mandatory_bonus in (''Yes'',''Y'') then
          q1_etd_payt_ctc_maj_cur
         else
          0
       end)  +

     sum(case
         when a.sales_incentive in (''Yes'',''Y'') then
          q1_etd_payt_ctc_maj_cur
         else
          0
       end)  ) as total_estimated_payout';

И ниже я попытался сделать v_select_sum - псевдоним суммы столбцов за квартал-1

v_select_sum := '(select associated_si,
prorated_ote_si,
estimated_payout_si,
prorated_ote_mb,
estimated_payout_mb,
prorated_ote_di,
estimated_payout_di,
revised_estimated_payout_di,
total_estimated_payout

from
(';

и объединение всех четвертей:

v_sql_sum := 'select * from ||v_select_sum ||
   (' || q1_query || 'union' || q2_query || 'union' ||
               q3_query || 'union' || q4_query || 'union' || v_i1 ||
               'union' || v_i2 || 'union' || v_i3 || 'union' || v_i4 || ')';
...