Sql Oracle多维查询
我在Oracle数据库中有一个表,其中包含大量日期。称为日志日期。 这是生成以下输出的查询:Sql Oracle多维查询,sql,oracle,Sql,Oracle,我在Oracle数据库中有一个表,其中包含大量日期。称为日志日期。 这是生成以下输出的查询: SELECT * FROM ITAR.LOG_ITEM WHERE ACTION='APPROVE' LOG_ITEM LOG_DATE ACTION REQUEST 1 2014-10-15 13:51:24.0 APPROVE POSTPONE 2 2014-11-18 14:54:47.0 APPROVE CLOSE 3
SELECT *
FROM ITAR.LOG_ITEM
WHERE ACTION='APPROVE'
LOG_ITEM LOG_DATE ACTION REQUEST
1 2014-10-15 13:51:24.0 APPROVE POSTPONE
2 2014-11-18 14:54:47.0 APPROVE CLOSE
3 2014-11-18 15:55:47.0 APPROVE POSTPONE
4 2014-11-19 14:52:47.0 APPROVE CLOSE
5 2014-09-17 14:22:37.0 APPROVE POSTPONE
我希望基于单个查询生成多维输出。
输出应该如下所示:
THIS_MONTH THIS_QUARTER THIS_YEAR
POSTPONE 1 2 3
CLOSE 2 2 2
有没有关于如何单独使用Oracle SQL来实现这一点的想法
如果它可以是“动态的”,也就是说,不需要在查询中硬编码月份、季度和年份,那就好了
感谢提供动态解决方案,您需要创建季度查找表,并将每个季度与一个月相关联。然后,您可以在该表上进行联接或使用相关子查询 下面是您想要什么的基本概念,它使用
分组依据
,以及计数
和大小写
:
select request,
count(case when trunc(log_date,'mm') = trunc(sysdate,'mm') then 1 end) this_month,
count(case when extract(month from log_date) in (10,11,12) then 1 end) this_quarter,
count(1) this_year
from log_item
where log_date >= to_date('1/1/2014','mm/dd/yyyy')
group by request
编辑:给出下面的@OllieJones评论,这实际上对您有效,而不需要季度查找表:
select request,
count(case when trunc(log_date,'mm') = trunc(sysdate,'mm') then 1 end) this_month,
count(case when trunc(log_date,'Q') = trunc(sysdate,'Q') then 1 end) this_quarter,
count(1) this_year
from log_item
where log_date >= trunc(sysdate,'yyyy')
group by request
TRUNC(log_date,'Q')
将实际生成日历季度截断。所以,您可能不需要(10,11,12)
之类的东西。@OllieJones--我不知道,谢谢!更新了答案。