2010-10-12 96 views
6

甲骨文有没有办法可以拉动FY?我用下面的脚本来拉两个风云。我的日期范围是从1998财年到2009财年。按会计年分组(Oracle)

SELECT 'FY2008' as FY, 
     Site, 
     COUNT(*) 
    FROM mytable 
    WHERE date >='10-OCT-2007' 
    AND date <'10-OCT-2008' 
GROUP BY site 

SELECT 'FY2008' as FY, 
     Site, 
     COUNT(*) 
    FROM mytable 
    WHERE date >='10-OCT-2008' 
    AND date <'10-OCT-2009' 
GROUP BY site 

牵二FY是确定的,但拉动超过10财年时,它的太多repeatative。

回答

8

83天添加到您的日期和它截断到全年:

select 'FY'||TRUNC(date + 83, 'YYYY') as FY, Site, count(*) 
from mytable 
group by 'FY'||TRUNC(date + 83, 'YYYY'), site 
+0

+1正是我要建议。 – 2010-10-13 08:02:02

+0

+1虽然我会用一个'Y'而不是4和83''间隔“而不是83.但是TRUNC在这里比TO_CHAR好得多。 – 2010-10-13 11:13:30

+0

为什么添加83天? – Sun 2013-02-06 23:37:04

1

有几个选项:

你可以在这里使用TO_CHAR函数。检查此链接了一个解释: http://www.techonthenet.com/oracle/functions/to_char.php

您也可以尝试使用CASE语句,

select case when date >='10-OCT-2007' and date <'10-OCT-2008' then 'FY08' 
      when date >='10-OCT-2008' and date <'10-OCT-2009' then 'FY09' 
      else 'Other' end as fiscal_year, count(*) 
    from mytable 
group by case when date >='10-OCT-2007' and date <'10-OCT-2008' then 'FY08' 
      when date >='10-OCT-2008' and date <'10-OCT-2009' then 'FY09' 
      else 'Other' end 

最后,如果您有创建表的权限,你可能要考虑制定一个日期查找表。在数据仓库指南中搜索“日期维度”。

例如:
您的表将有 日期,date_desc,fiscal_year等....

,那么你可能刚刚加入和group by财年,或其他任何你想要的。

2

假设甲骨文9I +,使用CASE表达式:

SELECT CASE 
      WHEN TO_CHAR(t.date,) = 10 AND EXTRACT(DAY FROM t.date) >= 10 THEN 
      'FY' || EXTRACT(YEAR FROM t.date) + 1 
      WHEN TO_CHAR(t.date,) > 10 THEN 
      'FY' || EXTRACT(YEAR FROM t.date) + 1 
      ELSE 
      'FY' || EXTRACT(YEAR FROM t.date) 
     END AS FY, 
     t.site, 
     COUNT(*) 
    FROM YOUR_TABLE t 
GROUP BY t.site, FY 
+0

t.date是否在11月1日? EXTRACT(从t.date开始的月份)> = 10但不是EXTRACT(从t.date开始)> = 10 – eumiro 2010-10-12 19:33:01

+0

@eumiro:良好的发现,已更正。 – 2010-10-12 19:40:26

2

并且为了完整性,除了@eumiro答案。在财政年度从7月1日至6月30日的国家(如澳大利亚),您可以用代替83。

0

这里是另一种方式来轻松地确定这些日期谁的财政年度运行七月至六月会计年度:

SELECT 'FY'||TO_CHAR(ROUND(your_date_here,'YEAR'),'YY') AS FY