Oracle как суммировать столбцы по номеру месяца - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть сводная таблица за 1 - 12 месяцев, основанная на фюре, фонде, glkey, globject У меня проблема с суммированием месяцев до заданного номера месяца для этой строки. Я могу добавить выражение Case, чтобы добавить как

WHEN  2 then  m01 + m02 
WHEN 12 then  m01 + m02 .. m12 

Кто-нибудь знает об al oop или лучшем способе сделать это?

Record in SQL

Функция, которую я создал, передавая ей 4 для значения месяца, должна быть 2537.50, но я получаю 15741.09.

    CREATE OR REPLACE FUNCTION gla_sum_asof_month (
    fyr   IN NUMBER  , fund  IN NUMBER  , au    IN CHAR
  , acct  IN NUMBER  , sacct IN NUMBER  , mnth  IN NUMBER  )
  RETURN NUMBER
  IS
  rtn_amt NUMBER(18,2) := 0;
  amt NUMBER(18,2) := 0;
BEGIN
SELECT SUM(amt) INTO rtn_amt FROM (
  SELECT *
    FROM   app_reports.vw_glamounts 
  UNPIVOT
   (
     amt  FOR fmonth
     IN (m01 AS 1, m02 AS 2, m03 AS 3, m04 AS 4 , m05 AS 5 , m06 AS 6,
         m07 AS 7, m08 AS 8 , m09 AS 9, m10 AS 10, m11 AS 11, m12 AS 12)
    )
   ) a
    WHERE  a.Fiscal_Year            = fyr
          AND    a.company          = fund
          AND    a.acct_unit        = au
          AND    a.account          = acct
          AND   a. sub_account      = sacct
          AND   a.fmonth            <= mnth;  -- filter # of months

   RETURN rtn_amt;
END gla_sum_asof_month;

1 Ответ

0 голосов
/ 10 февраля 2020

Вы можете unpivot свои данные на первом шаге, а затем pivot посредством условного агрегирования:

with t2 as
(
select fyr, fund, glkey, globject, 
       row_number() over (order by col) as rn,
       sum(val) over (order by col) as m 
  from t
 unpivot 
 (
  val for col in (m01 , m02, m03, .., m12)
 )  
)
select fyr, fund, glkey, globject,
       max(case when rn = 1 then m end) as m01,
       max(case when rn = 2 then m end) as m02,
       ...
       max(case when rn =12 then m end) as m12
  from t2
 group by fyr, fund, glkey, globject

order by col важно рассматривать как трюк для логики c.

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...