2011-11-03 40 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