#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