如何编写此SQL Order By Clause

时间:2011-11-03 15:53:19

标签: sql stored-procedures

我有一个SQL查询,我正在尝试编写,现在我对如何编写order by子句感到困惑。

基本上我选择的表具有严重性值的项目。我想选择这些项目并对它们进行排序,以便严重性列的顺序为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个项目选择到我的表变量中,最后只需选择所有项目。表变量,但这看起来有点乱,所以我想知道是否有更优雅的解决方案?

由于

4 个答案:

答案 0 :(得分:2)

既然你不喜欢UNION的答案,我不确定UNION是否能保证保留秩序......

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

答案 1 :(得分:1)

您可以通过以下案例陈述订购:

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

答案 2 :(得分:0)

首先,使用标准orderby子句选择严重级别为1-4的所有部分,然后将结果与仅选择严重性级别为0的第二个查询结合。

答案 3 :(得分:0)

除非我非常误,否则就是这样:

ORDER BY severity DESC, date DESC

将该行插入您的SQL。

这将首先按严重性对数据进行排序,如果它们具有相同的严重性,则根据日期对其进行排序。