2010-10-09 7 views
1

Existe-t-il un moyen dans SQL Server d'afficher l'exercice (commence le 1er octobre et finit le 30 septembre) à partir d'une table qui contient une colonne de date (de 1998 à 2010). Voici ce que je l'ai fait:SQL Server 2008 Question

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 

est-il pas trop répétitif quand vous le faites depuis plus de 10 ans l'exercice?

+0

Que voulez-vous montrer exactement? – CesarGon

+2

Votre question n'est pas claire du tout. Essayez de lire votre question comme quelqu'un qui ne sait pas ce qui se passe dans votre tête. –

Répondre

2

Vous pouvez créer une fonction pour calculer l'année 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') 

et utiliser cette fonction dans vos requêtes:

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

vous m'avez battu :) +1 –

+0

vous pourriez également prendre 10 mois de congé avant de regrouper/afficher +1 de toute façon –