Использование команды trunc и concatenate вместе с Join - PullRequest
0 голосов
/ 04 июля 2019
select EDR_Process_Time, MSISDN1, Total_payment/Total_data_MB from 
(

    select trunc(M_MOBILEMV.Q_RA_EDR_DETAILS_V.process_time) as EDR_Process_Time, M_MOBILEMV.Q_RA_EDR_DETAILS_V.MSISDN as MSISDN1, trunc(M_MOBILEMV.Q_RA_CDR_DETAILS_V.CDR_start_Date), M_MOBILEMV.Q_RA_CDR_DETAILS_V.served_msisdn, sum(M_MOBILEMV.Q_RA_CDR_DETAILS_V.charge_fee_1) as Charge_fee_CDR, 
    sum(M_MOBILEMV.Q_RA_EDR_DETAILS_V.charge_fee/100) as Total_Payment,
    sum(M_MOBILEMV.Q_RA_EDR_DETAILS_V.amount/1048576) as Total_data_MB,
    from (M_MOBILEMV.Q_RA_EDR_DETAILS_V 
    left join M_MOBILEMV.Q_RA_CDR_DETAILS_V on concat(trunc(M_MOBILEMV.Q_RA_EDR_DETAILS_V.process_time), M_MOBILEMV.Q_RA_EDR_DETAILS_V.MSISDN) = concat(trunc(M_MOBILEMV.Q_RA_CDR_DETAILS_V.CDR_start_date), M_MOBILEMV.Q_RA_CDR_DETAILS_V.served_MSISDN))

    group by trunc(M_MOBILEMV.Q_RA_EDR_DETAILS_V.Process_time), M_MOBILEMV.Q_RA_EDR_DETAILS_V.MSISDN
group by trunc(M_MOBILEMV.Q_RA_CDR_DETAILS_V.CDR_start_Date), M_MOBILEMV.Q_RA_CDR_DETAILS_V.Served_MSISDN
) 

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Синтаксис функций неправильный. Используйте функцию усечения как trunc(M_MOBILEMV.Q_RA_EDR_DETAILS_V.process_time). Использование суммы тоже неправильно. Вы также должны изменить их на sum(M_MOBILEMV.Q_RA_CDR_DETAILS_V.charge_fee_1.

0 голосов
/ 04 июля 2019

Во-первых, неправильный синтаксис в M_MOBILEMV.Q_RA_EDR_DETAILS_V.sum((charge_fee)/100) и другие подобные выражения. Если вам нужен столбец sum из charge_fee / 100 таблицы M_MOBILEMV.Q_RA_EDR_DETAILS_V (просмотр), он должен быть

sum(M_MOBILEMV.Q_RA_EDR_DETAILS_V.charge_fee/100)

Далее, вы не можете использовать псевдоним в том же списке SELECT, где он был представлен. Total_Payment и Total_data_MB должны появляться только в выражениях на внешнем SELECT.

Назначьте псевдонимы каждому выражению внутреннего select, псевдониму самого внутреннего select и используйте список квалифицированных имен и выражений, используя эти имена вместо * во внешнем select.

Кроме того, похоже, что GROUP BY отсутствует.

select t.process_time, t.MSISDN, t.sum1, 
  t.Total_Payment,
  t.Total_data_MB,
  t.Total_Payment/t.Total_data_MB as cost_per_MB  
from (
   select 
     M_MOBILEMV.Q_RA_EDR_DETAILS_V.process_time,
     M_MOBILEMV.Q_RA_EDR_DETAILS_V.MSISDN,
     sum(M_MOBILEMV.Q_RA_CDR_DETAILS_V.charge_fee_1) as sum1, 
     (coalesce(sum(M_MOBILEMV.Q_RA_CDR_DETAILS_V.charge_fee_1),0) + coalesce(sum(M_MOBILEMV.Q_RA_EDR_DETAILS_V.charge_fee/100),0)) as Total_Payment,
     sum(M_MOBILEMV.Q_RA_EDR_DETAILS_V.amount)/1048576 as Total_data_MB
     -- Don't you mean
     --GROUP BY M_MOBILEMV.Q_RA_EDR_DETAILS_V.process_time, M_MOBILEMV.Q_RA_EDR_DETAILS_V.MSISDN 
   from (M_MOBILEMV.Q_RA_EDR_DETAILS_V 
          left join M_MOBILEMV.Q_RA_CDR_DETAILS_V on concat(trunc(M_MOBILEMV.Q_RA_EDR_DETAILS_V.process_time), M_MOBILEMV.Q_RA_EDR_DETAILS_V.MSISDN) = concat(trunc(M_MOBILEMV.Q_RA_CDR_DETAILS_V.CDR_start_date), M_MOBILEMV.Q_RA_CDR_DETAILS_V.served_MSISDN)
   ) t
)
...