簡體   English   中英

在SQL Server 2008中按月排序

[英]Order by Month in SQL server 2008

我想根據月份訂購我的桌子。 ..但是事情是在財政年度中按月排序的,即4月進行。 提前致謝

您可以按可以為...寫表達式的任何方式進行排序...在您的情況下,請嘗試:

  ... Order By (Month(somedate) + 8) % 12

編輯:應該是8而不是9 ...

我建議與Jakob的回答類似的內容,但僅限於以下方面:

((month(somedate) - 4) + 12) % 12

從4月開始減去4個班次。 在4月之前增加12個句柄,並且模數會在4月之后修正上一個步驟。

這將產生0到11范圍內的結果。同樣, x - 4 + 12步長可以簡化為x + 8 為了說明起見,我認為我將其省略。

上面的許多方法都可以使用,但是如果您發現自己使用不同的日歷進行了大量的日期操作,則可能值得創建一個單獨的日歷表作為查找。

就像是


CREATE TABLE [dim].[Date](
    [DateSK] [int] NOT NULL,
    [Date] [datetime] NOT NULL,
    [Year] [int] NOT NULL,
    [Month] [int] NOT NULL,
    [Day] [int] NOT NULL,
    [WeekDayName] [varchar](9) NOT NULL,
    [MonthName] [varchar](9) NOT NULL,
    [QuarterNumber] [int] NOT NULL,
    [FinancialYear] [int] NOT NULL,
    [FinancialMonth] [int] NOT NULL,
    [MonthLength] [int] NOT NULL,
    [DaysRemainingInMonth] [int] NOT NULL,
    [DaysRemainingInYear] [int] NOT NULL,
    [IsLeapYear] [bit] NOT NULL,
    [DaysInYear] [int] NOT NULL,
    [DayOfYear] [int] NOT NULL,

    etc, etc.
)

USE my_db

SELECT 
    MONTH(t1.expiry) as SortOrder, 
    DATENAME(MONTH,t1.expiry) AS ExpiryMonth,  
    COUNT(*) AS Count

FROM 
    table1 t1 LEFT JOIN table2 t2 ON t2.c1 = t1.c1

WHERE 
    YEAR(t1.expiry) = '2012' AND t2.c2 = 'X'

GROUP BY
    MONTH(t1.expiry),
    DATENAME(MONTH,t1.expity)

ORDER BY 
    SortOrder ASC

我猜想像這樣的更通用的解決方案比總是使用自定義排序更好。 就處理時間而言,所涉及的成本不高。

SELECT
Column1,
Column2,
Column3,
SomeDate,
CASE MONTH(SomeDate)
  WHEN  4 THEN  1
  WHEN  5 THEN  2
  WHEN  6 THEN  3
  WHEN  7 THEN  4
  WHEN  8 THEN  5
  WHEN  9 THEN  6
  WHEN 10 THEN  7
  WHEN 11 THEN  8
  WHEN 12 THEN  9
  WHEN  1 THEN 10
  WHEN  2 THEN 11
  WHEN  3 THEN 12
END as FiscalMonth
FROM myTable
ORDER BY FiscalMonth

這個怎么樣:

SELECT ...
ORDER BY MONTH(SomeDate) % 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM