0
我試圖實現在使用CASE
聲明我的SQL查詢ORDER BY
子句中的「自定義」排序,但它給了我一些時髦的訂貨訂購在SQL
這裏是我的ORDER BY
條款至今:
ORDER BY
CASE WHEN
CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() > DATEADD(mi,30, CAST(StartDateTime AS DATETIME))THEN 1
WHEN
CheckInStatus <> 'Cancelled' AND ArrivalTime is null AND GETDATE() <= DATEADD(mi,30, CAST(StartDateTime AS DATETIME)) THEN 2
WHEN ArrivalTime is not null THEN 3
WHEN CheckInStatus='Cancelled' THEN 4
ELSE 5
END,
StartDateTime, ScanTechName
我想要做的就是爲了查詢如下:
的人誰沒有到達(誰的約會不會取消)和當前時間比過去相比的開始時間30分鐘大 - 這些男人應該先
的人誰沒有到達(誰的約會不會取消)和當前時間小於或等於過去的開始時間30分鐘 - 這些傢伙出現第二
接下來是大家誰檢查在
隨後取消預約
最後則一切
所有的一切都將開始時間和名稱
訂購這個問題似乎與2和3發生。這些傢伙似乎混在一起,我認爲這可能與我的AND有關,但我不知道如何解決它。
下面是我在結果得到的錯誤 - 我已經包含在ORDER BY
的CASE
直觀地看到這個問題
Arrival Time | CheckIn Status | StartDateTime | OrderStatus
----------------------------------------------------------------------------------
2014-08-15 08:00:07.123 | Arrived | 2014-08-15 07:15:00.000 | 3
----------------------------------------------------------------------------------
2014-08-15 07:47:48.643 | Arrived | 2014-08-15 07:30:00.000 | 2
那麼一兩件事情發生
- 由於我目前的GETDATE()是8/28/2014 - 上面不應該有2狀態。由於它不小於或等於StartDate後的30分鐘
- 由於這本身是錯誤的,因此可能會導致第二個問題 - 因爲它被標記爲2,所以應該在3之前出現。
將CASE語句移入SELECT子句,以便您可以清楚地看到結果。考慮分離ArrivalTime和CheckinStatus的邏輯。 – 2014-09-02 13:24:07
由於您的2狀態包括'ArrivalTime爲空',因此您的第二行不可能有2狀態。您的帖子中必須有錯誤。 – 2014-09-02 13:25:51
請發佈不僅僅是ORDER BY的完整查詢。 – wdosanjos 2014-09-02 13:45:30