[英]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.