Как правильно отсортировать кварталы финансового года в SQL? - PullRequest
0 голосов
/ 10 апреля 2020

Я использую следующий код для изменения даты в соответствующем квартале.

    CASE
        WHEN MONTH(B.CDate) BETWEEN 1  AND 3  THEN 'Q3 ' + convert(char(4), YEAR(B.CDate) - 0)
        WHEN MONTH(B.CDate) BETWEEN 4  AND 6  THEN 'Q4 ' + convert(char(4), YEAR(B.CDate) - 0)
        WHEN MONTH(B.CDate) BETWEEN 7  AND 9  THEN 'Q1 ' + convert(char(4), YEAR(B.CDate) + 1)
        WHEN MONTH(B.CDate) BETWEEN 10 AND 12 THEN 'Q2 ' + convert(char(4), YEAR(B.CDate) + 1) 
    END AS Quarter,

Как правильно оформить заказ на Квартал

1 Ответ

1 голос
/ 10 апреля 2020

Предполагая, что это запрос агрегации, вы можете просто выбрать дату в квартале:

order by min(b.CDate)

Вы можете отсортировать напрямую по кварталу, если вы представляете их как YYYYQn вместо QnYYYY.

A CASE выражение не требуется. Вы также можете упростить логику c до:

CONCAT(DATENAME(YEAR, DATEADD(MONTH, -6, B.CDate)),
       'Q', DATENAME(QUARTER, DATEADD(MONTH, -6, B.CDate))
      ) as Quarter,

То есть ваш квартал - это «стандартный» квартал, который вы получаете, когда вычитаете 6 месяцев.

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