2010-10-12 100 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