2010-10-09 7 views
1

Есть ли способ в SQL Server, который может показать финансовый год (начинается 1 октября и заканчивается 30 сентября) из таблицы с столбцом даты (с 1998 по 2010 год). Вот что я сделал:Вопрос SQL Server 2008

select 'FY1999' as FY, site, count(*) from mytable 
where mydate >='10/1/1998' and mydate <'10/1/1999' 
group by site 

select 'FY2000' as FY, site, count(*) from mytable 
where mydate >='10/1/1999' and mydate <'10/1/2000' 
group by site 

select 'FY2001' as FY, site, count(*) from mytable 
where mydate >='10/1/2000' and mydate <'10/1/2001' 
group by site 

Разве это не слишком много повторяющихся, делая это в течение более 10 FY года?

+0

Что вы хотите, чтобы показать именно? – CesarGon

+2

Ваш вопрос не совсем ясен. Попробуйте прочитать свой вопрос как тот, кто * не знает, что происходит внутри вашей головы. –

ответ

2

Вы можете создать функцию для расчета fical года:

CREATE FUNCTION fn_FiscalYear(@date DATETIME) 
RETURNS INT 
AS BEGIN 
    DECLARE @AddYear int 
    SET @AddYear = 0 
    IF (DATEPART(mm, @date) > 9) 
     SET @AddYear = 1 

    RETURN(DATEDIFF(yyyy, '1999-10-01', @date)[email protected]) 
END 
go 

select dbo.fn_FiscalYear('1999-10-01') 
select dbo.fn_FiscalYear('2000-09-30') 
select dbo.fn_FiscalYear(GETDATE()) 
select dbo.fn_FiscalYear('2005-01-01') 
select dbo.fn_FiscalYear('2004-12-31') 

и использовать эту функцию в своих запросах:

SELECT dbo.fn_FiscalYear(TransactionDate), Amount 
FROM dbo.Transactions 
4
select case 
      when month(MyDate) >= 10 then Year(MyDate) + 1 
      else Year(MyDate) 
     end as FiscalYear, 
    count(*) as Count 
from MyTable 
group by case 
      when month(MyDate) >= 10 then Year(MyDate) + 1 
      else Year(MyDate) 
     end 
+0

вы избили меня до этого :) +1 –

+0

вы также можете взять 10 месяцев с даты до группировки/отображения +1 в любом случае –

Смежные вопросы