Sql 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

我在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        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--我不知道,谢谢!更新了答案。