Как написать этот SQL Order By Clause - PullRequest
1 голос
/ 03 ноября 2011

У меня есть SQL-запрос, который я пытаюсь написать, и теперь немного застрял в том, как написать заказ по предложению.

В основном в таблице, из которой я выбираю, есть элементы со значением серьезности.Я хочу выбрать эти элементы и упорядочить их так, чтобы столбцу Серьезность был присвоен уровень серьезности 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 элементов в моей переменной таблицы инаконец, просто выберите все обратно из табличной переменной, но это кажется немного грязным, поэтому мне интересно, есть ли более элегантное решение?

Спасибо

Ответы [ 4 ]

2 голосов
/ 03 ноября 2011

Поскольку вам не понравился ответ UNION, и я не уверен, что UNION гарантированно сохранит порядок ...

ORDER BY CASE WHEN severity = 0 THEN 999 ELSE Severity END, date 
1 голос
/ 03 ноября 2011

Вы можете сделать заказ в выписке по делу, например так:

ORDER BY CASE Severity WHEN 0 THEN 1 ELSE 2 END, Severity
0 голосов
/ 03 ноября 2011

Если я не очень сильно ошибаюсь, это примерно так:

ORDER BY severity DESC, date DESC

Вставьте эту строку в ваш SQL.

Сначала будут отсортированы данные по степени серьезности, а если они имеют одинаковую степень серьезности, то сортируются по дате.

0 голосов
/ 03 ноября 2011

Сначала выберите все из них с уровнями серьезности 1-4, используя стандартное предложение orderby, затем объедините результаты со вторым запросом, который выбирает только те, которые имеют уровень серьезности 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...