Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL显示将一个变量除以另一个变量的结果_Oracle_Variables_Division - Fatal编程技术网

Oracle SQL显示将一个变量除以另一个变量的结果

Oracle SQL显示将一个变量除以另一个变量的结果,oracle,variables,division,Oracle,Variables,Division,我需要计算总金额的年初至今每周平均值 在下面的脚本中,代码的第一部分获取周数。代码的第二部分获取同一时间段的YTD总和 如何编写SQL,以便检索YtdTotal/TotalWeeks的实际值 从DUAL中选择YtdTotal/TotalWeeks;不起作用 -- STORES NUMBER OF WEEKS SINCE BEGINING OF YEAR INTO THE VARIABLE, TotalWeeks DECLARE TotalWeeks NUMBER; BEGIN S

我需要计算总金额的年初至今每周平均值

在下面的脚本中,代码的第一部分获取周数。代码的第二部分获取同一时间段的YTD总和

如何编写SQL,以便检索YtdTotal/TotalWeeks的实际值

从DUAL中选择YtdTotal/TotalWeeks;不起作用

-- STORES NUMBER OF WEEKS SINCE BEGINING OF YEAR INTO THE VARIABLE, TotalWeeks
DECLARE
    TotalWeeks NUMBER;
BEGIN
    SELECT to_number(to_char(sysdate, 'WW')) - to_number(to_char(trunc(sysdate, 'year'),'WW'))
    INTO TotalWeeks
    FROM DUAL
    -- (retrieves number of weeks since beginning of year)
END

-- STORES THE SUM OF GROSS)AMOUNT FOR THE WEEKS CALCULATED ABOVE - INTO THE 
DECLARE
    VARIABLE, YtdTotal
BEGIN
    SELECT SUM(GROSS_AMOUNT) 
    INTO YtdTotal
    FROM PARENTS
    WHERE process_date BETWEEN
    (next_day(TRUNC(sysdate, 'year'),'SUN'))
    AND
    (next_day(TRUNC(sysdate),'SAT')-7);
END;

不要使用两个单独的匿名PL/SQL块-将它们组合成一个

如果要返回结果,则创建一个函数,而不是匿名PL/SQL块

CREATE OR REPLACE FUNCTION f_test
  return NUMBER
IS
   totalweeks  NUMBER;
   ytdtotal    NUMBER;
   result      NUMBER;
BEGIN
   -- STORES NUMBER OF WEEKS SINCE BEGINING OF YEAR INTO THE VARIABLE, TotalWeeks
   SELECT   TO_NUMBER (TO_CHAR (SYSDATE, 'WW'))
          - TO_NUMBER (TO_CHAR (TRUNC (SYSDATE, 'year'), 'WW'))
     INTO totalweeks
     FROM DUAL;

   -- (retrieves number of weeks since beginning of year)

   -- STORES THE SUM OF GROSS)AMOUNT FOR THE WEEKS CALCULATED ABOVE - INTO THE
   SELECT SUM (gross_amount)
     INTO ytdtotal
     FROM parents
    WHERE process_date BETWEEN (NEXT_DAY (TRUNC (SYSDATE, 'year'), 'SUN'))
                           AND (NEXT_DAY (TRUNC (SYSDATE), 'SAT') - 7);

   -- the final result
   result := ytdtogal / totalweeks;
   RETURN result;
END;
/
把它当作

select f_test from dual;

你为什么要申请从日期到系统日期?to_date将字符串转换为日期(数据类型),sysdate是日期。此外,如果您实际复制并粘贴文本,将粘贴的文本格式化为“代码”,而不是屏幕截图,那么您的代码将更易于我们阅读。此外,如果为表和插入项提供DDL以创建代表性数据,也会有所帮助。谢谢你的反馈。我已经更正了最新的问题,并用代码格式替换了屏幕截图。我真正需要知道的是检索YtdTotal除以TotalWeeks的值的正确语法。这些是我将计算传递给成功执行的查询的变量,谢谢。但我不确定如何从“result”变量中检索实际值。我试着从DUAL中选择结果,但结果不起作用。然后,它将是一个函数。我编辑了答案,看一看。很好,非常感谢。不客气。