我有一个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个项目选择到我的表变量中,最后只需选择所有项目。表变量,但这看起来有点乱,所以我想知道是否有更优雅的解决方案?
由于
答案 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。
这将首先按严重性对数据进行排序,如果它们具有相同的严重性,则根据日期对其进行排序。