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
Oracle SQL-将一个多行查询列除以另一个多行查询列_Sql_Oracle_Subquery - Fatal编程技术网

Oracle SQL-将一个多行查询列除以另一个多行查询列

Oracle SQL-将一个多行查询列除以另一个多行查询列,sql,oracle,subquery,Sql,Oracle,Subquery,我需要计算我的首席财务官的每日未完成销售额(DSO),跟踪12个会计期间。DSO的计算如下: ar_balance / (credit_sales_sum / days_in_period) 以下是我的查询,以提取按期间分组的应收账款余额: SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, SUM(ABS(v_glacct_ybb_all_periods_cumm.pe

我需要计算我的首席财务官的每日未完成销售额(DSO),跟踪12个会计期间。DSO的计算如下:

ar_balance / (credit_sales_sum / days_in_period)
以下是我的查询,以提取按期间分组的应收账款余额:

SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, 
 SUM(ABS(v_glacct_ybb_all_periods_cumm.period_balance)) as ar_balance
FROM v_glacct_ybb_all_periods_cumm
WHERE (v_glacct_ybb_all_periods_cumm.glperiods_end_date BETWEEN 
 add_months(TRUNC(sysdate, 'month'), -12) AND TRUNC(sysdate, 'month'))
 AND (acct='1100-00-10-00')
GROUP by v_glacct_ybb_all_periods_cumm.glperiods_end_date
ORDER by v_glacct_ybb_all_periods_cumm.glperiods_end_date
SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, 
 ROUND((sum(abs(v_glacct_ybb_all_periods_cumm.period_balance))) / 
 (EXTRACT(day FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date)),2) AS sales_calc
FROM v_glacct_ybb_all_periods_cumm
WHERE(v_glacct_ybb_all_periods_cumm.glperiods_end_date BETWEEN add_months(TRUNC(sysdate, 'month'), -12)
 AND TRUNC(sysdate, 'month'))
 AND (acct='4080-00-10-00' OR acct='4090-00-10-00' OR acct='4095-00-10-00' OR acct='4096-00-10-00')
GROUP BY v_glacct_ybb_all_periods_cumm.glperiods_end_date
ORDER BY v_glacct_ybb_all_periods_cumm.glperiods_end_date
这给了我一个类似的结果:

MONTH AR_BALANCE
----- -----------
9     $102,408.33
10    $163,715.86
11    $114,683.96
12    $198,223.75
1     $155,598.19
2     $123,121.00
etc   etc
现在,我的查询是将信用额除以期间内的天数,再次按期间分组:

SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, 
 SUM(ABS(v_glacct_ybb_all_periods_cumm.period_balance)) as ar_balance
FROM v_glacct_ybb_all_periods_cumm
WHERE (v_glacct_ybb_all_periods_cumm.glperiods_end_date BETWEEN 
 add_months(TRUNC(sysdate, 'month'), -12) AND TRUNC(sysdate, 'month'))
 AND (acct='1100-00-10-00')
GROUP by v_glacct_ybb_all_periods_cumm.glperiods_end_date
ORDER by v_glacct_ybb_all_periods_cumm.glperiods_end_date
SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, 
 ROUND((sum(abs(v_glacct_ybb_all_periods_cumm.period_balance))) / 
 (EXTRACT(day FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date)),2) AS sales_calc
FROM v_glacct_ybb_all_periods_cumm
WHERE(v_glacct_ybb_all_periods_cumm.glperiods_end_date BETWEEN add_months(TRUNC(sysdate, 'month'), -12)
 AND TRUNC(sysdate, 'month'))
 AND (acct='4080-00-10-00' OR acct='4090-00-10-00' OR acct='4095-00-10-00' OR acct='4096-00-10-00')
GROUP BY v_glacct_ybb_all_periods_cumm.glperiods_end_date
ORDER BY v_glacct_ybb_all_periods_cumm.glperiods_end_date
这给了我一个类似于第一个查询的多行结果:

MONTH SALES_CALC
----- ----------
9     $48,975.43
10    $44,167.89
11    $48,997.81
12    $49,493.17
1     $48,218.43
2     $52,523.84
etc   etc
这就引出了我的问题。我不知道如何将第一个查询的“应收账款余额”列的结果除以第二个查询的“销售额计算”列,同时也包括“月份”列。我尝试了来自的解决方案,但我得到了一个错误“Field'='的类型未知”。经过几个小时的搜寻,我已经没有主意了。如何才能做到这一点?

如果我错了,请纠正我。 如果您需要划分两个中间查询result和get MONTH列,那么只需在脚本中取消对查询的注释并删除我的测试输入数据即可

with ar_bal_tab as (
/*
SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, 
 SUM(ABS(v_glacct_ybb_all_periods_cumm.period_balance)) as ar_balance
FROM v_glacct_ybb_all_periods_cumm
WHERE (v_glacct_ybb_all_periods_cumm.glperiods_end_date BETWEEN 
 add_months(TRUNC(sysdate, 'month'), -12) AND TRUNC(sysdate, 'month'))
 AND (acct='1100-00-10-00')
GROUP by v_glacct_ybb_all_periods_cumm.glperiods_end_date
ORDER by v_glacct_ybb_all_periods_cumm.glperiods_end_date
*/
select 9 as month, 102408.33 as ar_balance from dual
union all
select 10 as month, 163715.86 as ar_balance from dual
union all
select 11 as month, 114683.96 as ar_balance from dual
union all
select 12 as month, 198223.75 as ar_balance from dual
union all
select 1 as month, 155598.19 as ar_balance from dual
union all
select 2 as month, 123121.00 as ar_balance from dual
),
sales_calc_tab as (
/*
SELECT EXTRACT(month FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date) AS month, 
 ROUND((sum(abs(v_glacct_ybb_all_periods_cumm.period_balance))) / 
 (EXTRACT(day FROM v_glacct_ybb_all_periods_cumm.glperiods_end_date)),2) AS sales_calc
FROM v_glacct_ybb_all_periods_cumm
WHERE(v_glacct_ybb_all_periods_cumm.glperiods_end_date BETWEEN add_months(TRUNC(sysdate, 'month'), -12)
 AND TRUNC(sysdate, 'month'))
 AND (acct='4080-00-10-00' OR acct='4090-00-10-00' OR acct='4095-00-10-00' OR acct='4096-00-10-00')
GROUP BY v_glacct_ybb_all_periods_cumm.glperiods_end_date
ORDER BY v_glacct_ybb_all_periods_cumm.glperiods_end_date
*/
select 9 as month, 48975.43 as sales_calc from dual
union all
select 10 as month ,44167.89 as sales_calc from dual
union all
select 11 as month ,48997.81 as sales_calc from dual
union all
select 12 as month ,49493.17 as sales_calc from dual
union all
select 1 as month ,48218.43 as sales_calc from dual
union all
select 2 as month, 52523.84 as sales_calc from dual
)
select 
    abt.month,
     ar_balance / sales_calc as DSO
    from ar_bal_tab abt,
         sales_calc_tab sct
     where abt.month = sct.month
希望能有帮助。
Dionis。

进行这两个查询子查询。将它们连接在一起并参考列。在a.month=B.month上从子查询a内部联接子查询B中选择应收账款余额/销售额计算这项工作非常出色。我以前从未在查询中使用过“WITH”子句,但现在我肯定会将其添加到工具箱中。非常感谢你!