按财政年度分组(Oracle)

时间:2010-10-12 19:12:37

标签: oracle

Oracle有没有可以拉动风险的方法?我用下面的脚本只拉了两个风云。 Mytable日期范围从1998财政年度到2009财年。

 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个FY时它太重复了。

5 个答案:

答案 0 :(得分:8)

将83天添加到您的日期并将其截断为全年:

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

答案 1 :(得分:2)

假设使用Oracle 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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

一些选择:

您可以在此处使用to_char函数。请查看此链接以获取解释: http://www.techonthenet.com/oracle/functions/to_char.php

您也可以尝试使用案例陈述

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,date_desc,fiscal_year等....

那么你可以按财政年度或其他任何你想要的方式加入和分组。

答案 4 :(得分:0)

以下是另一种方法,可以轻松确定7月至6月财政年度的财政年度:

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