Показывает, в каком квартале финансового года дата - PullRequest
3 голосов
/ 05 января 2012

Я пытаюсь создать запрос, который отобразит два столбца: один - дату из таблицы, второй - псевдоним, чтобы показать, в какой квартал и финансовый год попадает дата.

К сожалению, мне не хватает знаний SQL, чтобы понять, с чего начать. Я знаю, что я сделал бы это с комбинацией getdate() и dateadd(MONTH,,), однако ничто из того, что я собрал, не приблизилось к работе.

Чтобы еще больше усложнить это, финансовые годы в Австралии начинаются с 1 июля по 30 июня, поэтому первый квартал 2012 финансового года начнется с 1 июля 2012 года.

Я могу сделать это без заявления, но я бы предпочел, чтобы оно было в утверждении, поскольку оно будет использоваться в отчете SSRS и приложении C #, и это значительно упростит обслуживание.

Ответы [ 15 ]

0 голосов
/ 26 июля 2017

Вот альтернатива принятому ответу:

declare @tbl table (MyDate datetime)
insert into @tbl values ('2011-01-01')
insert into @tbl values ('2011-04-01')
insert into @tbl values ('2011-07-01')
insert into @tbl values ('2011-10-01')

SELECT CAST(MyDate AS DATE) as MyDate, CAST(YEAR(DATEADD(MONTH, -6, MyDate)) AS VARCHAR(4)) + 'Q'
    + CAST(DATEPART(q,DATEADD(MONTH, -6, MyDate)) AS VARCHAR(1)) AS Quarter
FROM @tbl

Вывод:

MyDate     Quarter
---------- -------
2011-01-01 2010Q3
2011-04-01 2010Q4
2011-07-01 2011Q1
2011-10-01 2011Q2

Это работает, даже если MyDate похож на 31 августа - если вы вычли 6 месяцев из 8 /31 в SQL, вы получите 2/28 (хотя 2/31 не существует, MSSQL все еще знает, что вы, вероятно, хотите последний день месяца).Поскольку квартал основан на месяце года, этот подход работает.

0 голосов
/ 25 июля 2017
SELECT Opendate,Month(Opendate),
       (CASE WHEN (Month(Opendate)/6.0)<=1 THEN 1 ELSE 2 END) HALF_YEAR 
FROM TableName where Opendate <> '1900-01-01 00:00:00.000'
0 голосов
/ 09 мая 2017
SELECT
MyDate,
CASE
    WHEN MONTH(MyDate) IN (1,2,3)  THEN convert(char(4), YEAR(MyDate) - 1) + 'Q3'
    WHEN MONTH(MyDate) IN (4,5,6)  THEN convert(char(4), YEAR(MyDate) - 1) + 'Q4'
    WHEN MONTH(MyDate) IN (7,8,9)  THEN convert(char(4), YEAR(MyDate) - 0) + 'Q1'
    WHEN MONTH(MyDate) IN (10,11,12) THEN convert(char(4), YEAR(MyDate) - 0) + 'Q2'
END AS Quarter  FROM MyTable

Приведенные выше ответы не учитывают последний месяц квартала

например. от 1 до 3 вернутся только месяцы 1 и 2 ...

0 голосов
/ 29 ноября 2016

Возможно, я не понимаю вопроса, но принятый ответ не кажется правильным.Финансовый квартал зависит от того, с какого месяца начинается финансовый год, поэтому он всегда (?) Будет вычислением с двумя датами.

Вот что сработало для меня, без описания случая:

CEILING((DATEDIFF(MONTH, FinYearStartDate, MonthStartDate)) / 3) + 1
0 голосов
/ 01 декабря 2014

Сегодня я отправился на поиски ответа и решил, что мне следует опубликовать свое решение, поскольку оно избегает утверждения CASE:

select DATEPART(Quarter,dateadd(m,6,YourDate))/* add six months to move to FY */ qq

Это написано для австралийского финансового года, который скорректирован на шесть месяцев, вы можетепосмотри, что я делаю из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...