Группировка по финансовому году (Oracle) - PullRequest
6 голосов
/ 12 октября 2010

Есть ли способ в Oracle, который может вытащить FY? Я использовал сценарий ниже, чтобы вытащить только два FY. Доступный диапазон дат - от 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 ]

8 голосов
/ 12 октября 2010

Добавьте 83 дня к вашей дате и урежьте до целого года:

select 'FY'||TRUNC(date + 83, 'YYYY') as FY, Site, count(*)
from mytable
group by 'FY'||TRUNC(date + 83, 'YYYY'), site
2 голосов
/ 06 июня 2014

И для полноты, в дополнение к @eumiro отвечу.В странах (таких как Австралия), в которых финансовый год начинается с 1 июля по 30 июня, вы можете заменить 83 на 184 .

2 голосов
/ 12 октября 2010

Предполагая 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
1 голос
/ 12 октября 2010

Несколько вариантов:

Здесь вы можете использовать функцию 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 и т. Д. ...

, тогда вы можете просто присоединиться и сгруппировать по финансовому году или как хотите.

0 голосов
/ 21 июля 2016

Вот другой способ легко определить финансовый год даты для тех, чей финансовый год длится с июля по июнь:

SELECT 'FY'||TO_CHAR(ROUND(your_date_here,'YEAR'),'YY') AS FY
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...