首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据拆分为每个日期行的oracle查询

将数据拆分为每个日期行的oracle查询
EN

Database Administration用户
提问于 2021-11-18 12:05:36
回答 1查看 802关注 0票数 0

我需要创建一个报告,将表A中的值拆分为逐行格式。因此,例如,如果我创建了过去一周的日期子集和过去一周的销售,我需要输出“报告输出”格式。只是很难想出一种方法来“循环”date_range中的日期,然后说在sales_in_range中查找销售并进行计数,然后输出结果。

代码语言:javascript
复制
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

;

子查询提供以下信息。

日期范围:

代码语言:javascript
复制
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

销售日期范围:

代码语言:javascript
复制
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

报告产出:

代码语言:javascript
复制
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

EN

回答 1

Database Administration用户

发布于 2021-11-18 12:45:47

我不太清楚到目前为止您编写的查询的目的是什么,但是有什么理由不能这样简单地在GROUP BY从句与COUNT()聚合函数上使用sale_table呢?

代码语言:javascript
复制
SELECT sale_date, COUNT(*) AS sale_count
FROM sale_table
GROUP BY sale_date
ORDER BY sale_date

如果只需要对某个日期范围进行筛选,那么还可以添加一个WHERE子句(假设sale_date是基于日期的数据类型):

代码语言:javascript
复制
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_date
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/302827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档