sql - 如何在 SQL 中正确排序财政年度季度?
问题描述
我使用以下代码更改各个季度的日期。
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,
我如何在 Quarter 上正确订购
解决方案
假设这是一个聚合查询,您可以选择季度中的日期:
order by min(b.CDate)
如果将它们表示为 YYYYQn 而不是 QnYYYY,则可以直接按季度排序。
CASE
表达式是不必要的。您还可以将逻辑简化为:
CONCAT(DATENAME(YEAR, DATEADD(MONTH, -6, B.CDate)),
'Q', DATENAME(QUARTER, DATEADD(MONTH, -6, B.CDate))
) as Quarter,
也就是说,您的季度是减去 6 个月后得到的“标准”季度。