2011-11-03 41 views
1

我有一個SQL查詢,我正在嘗試編寫,現在有點卡住瞭如何編寫order by子句。如何編寫此SQL訂單子句

基本上我從中選擇的表具有嚴重性值的項目。我想要選擇這些項目並對它們進行排序,以便Severity列的順序爲嚴重性1-4,然後爲0,並且日誌日期爲每個下降。

嚴重性1最高4最低,0表示未分配的嚴重性,我需要顯示這些項目最高嚴重性,最早的項目第一,最低的嚴重性,最新的項目最後。

我到目前爲止查詢:

SELECT 
     [TicketID], 
     [type], 
     [Product], 
     [Description], 
     [LoggedBy], 
     [LogDate], 
     [Department], 
     [AssignedTo], 
     [Severity], 
     [Status], 
     [LastUpdatedBy], 
     [LastUpdatedDate] 
    FROM 
     SupportTicketsTbl 
    WHERE 
     TicketID NOT IN 
     (
      SELECT 
       tck.ticketID 
      FROM 
       SupportTicketsTbl tck 
      JOIN 
       tblTicketsInEvents tie 
      ON 
       tck.TicketID = tie.ticketID 
      JOIN 
       tblSupportEvent ev 
      ON 
       tie.eventID = ev.id 
      where 
       ev.type = 1 
     ) 
    AND 
     Status <> 'Complete' 

我想最簡單的方法是創建一個表變量,並選擇所有不在0到它在我想要的順序的項目,然後選擇所有0項到我的表變量,最後只是選擇一切從表變量,但這似乎有點凌亂,所以即時通訊想知道是否有一個更優雅的解決方案?

由於

回答

2

既然你不喜歡UNION答案,我不知道,如果UNION是保證維持秩序......

ORDER BY CASE WHEN severity = 0 THEN 999 ELSE Severity END, date 
0

首先,使用標準的OrderBy子句嚴重性級別1-4選擇所有的那些,則聯合與該級別爲僅選擇的那些的第二查詢的結果爲0。

+0

謝謝,多數民衆贊成我認爲id必須做的,我只是希望有一種方法可以做到這一點在一個ORDER BY等,而不必使用UNION – Purplegoldfish

+0

這是行不通的。按順序排列整個結果。 – Eric

+0

ORDER BY需要與UNION的單個查詢一起放在括號內,這通常會起作用。 (不知道是否總是會工作,雖然...) –

0

除非我非常誤會,否則是這樣的:

ORDER BY severity DESC, date DESC 

將該行插入到SQL中。

這將首先按嚴重性排序數據,如果它們具有相同的嚴重性,則根據日期對其進行排序。

+0

這將工作的冬季,但我必須有0後4,所以它是命令嚴重性1,2,3,4,0。 – Purplegoldfish

1

您可以通過一個case語句像這樣的命令:

ORDER BY CASE Severity WHEN 0 THEN 1 ELSE 2 END, Severity