Sql Oracle如何基于月数对列求和
我有一个基于fyr、基金、glkey、globject的1-12个月的汇总表。我遇到的问题是将该行的月份汇总到给定的月份数。我可以添加一个Case表达式来添加Sql Oracle如何基于月数对列求和,sql,oracle,sum,Sql,Oracle,Sum,我有一个基于fyr、基金、glkey、globject的1-12个月的汇总表。我遇到的问题是将该行的月份汇总到给定的月份数。我可以添加一个Case表达式来添加 WHEN 2 then m01 + m02 WHEN 12 then m01 + m02 .. m12 有人知道循环或更好的方法来实现这一点吗 我创建的函数传递它4的月值应该是2537.50,但我得到15741.09 CREATE OR REPLACE FUNCTION gla_sum_asof_month (
WHEN 2 then m01 + m02
WHEN 12 then m01 + m02 .. m12
有人知道循环或更好的方法来实现这一点吗
我创建的函数传递它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;
您可以在第一步中取消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
一个更好的方法是规范化您的数据模型,不如选择使用聚合,使用月和?过期-非常类似于@a_horse_with_no_name所说的数据建模问题,这样您就不需要m01 m02等约束,我也会看看UNPIVOT是否有帮助。我创建了一个从SQL调用的函数。我创建了一个从SQL调用的函数,但当我调用它时,得到的数字不符合我期望的任何值。如果我只在函数中运行SQL,那么它是正确的。我试着发布代码,但窗口太小了。我该怎么做才能发布代码?它只有26行,但超过了允许的字符数。