Финансовый год SQL в отчете

#sql

#sql

Вопрос:

У меня есть sql-запрос, который показывает год в одном столбце и месяц в другом. Я могу показать отчет как текущий год, но мне нужно показать его в финансовой форме, например, наш финансовый год относится к октябрю-октябрю, так как я могу сделать это в sql? Мой текущий запрос ниже:

 SELECT TOP (15) dbo.timelinedayres_v1_0.fiscalyear, 
                dbo.timelinedayres_v1_0.fiscalmonth, 
                SUM(dbo.factqht_v2.baanstandarcost)                 AS stdcost, 
                CAST(dbo.timelinedayres_v1_0.fiscalmonth AS VARCHAR)   ' - '   
                CAST(dbo.timelinedayres_v1_0.fiscalyear AS VARCHAR) AS CONCAT 
FROM   dbo.timelinedayres_v1_0 
       INNER JOIN dbo.factqht_v2 
         ON dbo.timelinedayres_v1_0.epoch = dbo.factqht_v2.qhtwfclosedtimekey 
       INNER JOIN dbo.dimqht_v2 
         ON dbo.factqht_v2.qhtid = dbo.dimqht_v2.qhtid 
       LEFT OUTER JOIN dbo.dimqhtmaterials_v2 
         ON dbo.factqht_v2.materialid = dbo.dimqhtmaterials_v2.materialid 
       LEFT OUTER JOIN dbo.dimqhtdispositions_v2 
         ON dbo.factqht_v2.dispositionid = 
            dbo.dimqhtdispositions_v2.dispositionid 
GROUP  BY dbo.dimqhtdispositions_v2.TYPE, 
          dbo.timelinedayres_v1_0.fiscalyear, 
          dbo.timelinedayres_v1_0.fiscalmonth, 
          dbo.dimqht_v2.toplevelassembly_majoritemgroupdesc, 
          CAST(dbo.timelinedayres_v1_0.fiscalmonth AS VARCHAR)   ' - '   
          CAST(dbo.timelinedayres_v1_0.fiscalyear AS VARCHAR) 
HAVING ( dbo.dimqhtdispositions_v2.TYPE = N'Scrap' ) 
       AND ( dbo.dimqht_v2.toplevelassembly_majoritemgroupdesc = 
             'Torquer Motors' ) 
ORDER  BY dbo.timelinedayres_v1_0.fiscalmonth  
 

Ответ №1:

Вот как я это делаю:

 SELECT YEAR(DATEADD(month, 2   DATEDIFF(month, 0, GETDATE()), 0))
 

Поскольку мы находимся в ноябре, это вернет 2012 год, если дата — октябрь, она вернет 2011 год. Вы можете настроить свое смещение.

Если вы приходите всего за месяц / год, вы могли бы сделать что-то вроде этого:

 declare @month int
declare @year int
set @year = 2011
set @month = 10
    SELECT CASE  
               WHEN @month > 10  
                   THEN @year   1
               ELSE 
                   @year
           END AS fiscalYear