首页 > 解决方案 > 如何在 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 上正确订购

标签: sqlsql-serversortingsql-order-by

解决方案


假设这是一个聚合查询,您可以选择季度中的日期:

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 个月后得到的“标准”季度。


推荐阅读