我需要创建一个报告,将表A中的值拆分为逐行格式。因此,例如,如果我创建了过去一周的日期子集和过去一周的销售,我需要输出“报告输出”格式。只是很难想出一种方法来“循环”date_range中的日期,然后说在sales_in_range中查找销售并进行计数,然后输出结果。
WITH
date_range (date_val)
as
(select sysdate-7 + level
from dual
connect by level <= ( sysdate - (sysdate-7))
),
sales_in_range (itemcode,sale_date,value)
as
(select itemcode,sale_date,value
from sale_table
where sale_date between (sysdate-7) and (sysdate)
);
-- REPORT OUTPUT SQL
;子查询提供以下信息。
日期范围:
select * from date_range
date_val
12-NOV-21
13-NOV-21
14-NOV-21
15-NOV-21
16-NOV-21
17-NOV-21
18-NOV-21销售日期范围:
select * from sales_in_range;
itemcode sale_date value
00001 12-NOV-21 0
00002 13-NOV-21 0
00003 15-NOV-21 0
00004 15-NOV-21 0
00005 16-NOV-21 0
00006 16-NOV-21 0
00007 16-NOV-21 0
00008 18-NOV-21 0
00009 18-NOV-21 0
00010 18-NOV-21 0报告产出:
sale_date sale_count
12-NOV-21 1
13-NOV-21 1
14-NOV-21 0
15-NOV-21 2
16-NOV-21 3
17-NOV-21 0
18-NOV-21 3提前感谢
K
发布于 2021-11-18 12:45:47
我不太清楚到目前为止您编写的查询的目的是什么,但是有什么理由不能这样简单地在GROUP BY从句与COUNT()聚合函数上使用sale_table呢?
SELECT sale_date, COUNT(*) AS sale_count
FROM sale_table
GROUP BY sale_date
ORDER BY sale_date如果只需要对某个日期范围进行筛选,那么还可以添加一个WHERE子句(假设sale_date是基于日期的数据类型):
SELECT sale_date, COUNT(*) AS sale_count
FROM sale_table
WHERE sale_date >= TO_DATE('SomeStartDate', 'SomeDateFormat')
AND sale_date < TO_DATE('SomeEndDate', 'SomeDateFormat')
GROUP BY sale_date
ORDER BY sale_datehttps://dba.stackexchange.com/questions/302827
复制相似问题