2013-02-28 5 views
0

У меня есть таблица с именем, статусом, неудачей или успехом, counts от 1 до 100. Я хочу заказать его таким образом, чтобы имена только «fail» должны показать сверху вместе, то же имя с неудачей и успехом вместе, а затем имена с успехом вместе. Можем ли мы сделать это на языке запросов sql? Спасибо.SQL order by multiple condition

+0

Проверьте это: http://stackoverflow.com/questions/2758374/tsql-ordering- data-by-specific-string-values ​​В принципе вы можете 'ORDER BY' использовать инструкцию' CASE', за которой следует имя и количество. – Deruijter

+1

И вы используете MySQL или SQL Server? (и с какой версией?) – Lamak

+0

Что значит «вместе» в соответствии с вами? Какое влияние «имеет значение» на вашу сортировку? Лучше всего было бы представить пример данных, а затем пример ожидаемого результата. Это ускорит ваш вопрос. Из-за уникальности воображения каждого человека, я думаю, может быть несколько различных решений и результатов, подходящих для вашего запроса. Так что да, добавьте пример того, чего вы хотите достичь :) –

ответ

3

Хорошо, это должно работать на большинстве СУБД:

SELECT A.* 
FROM YourTable A 
INNER JOIN (SELECT name, 
        COUNT(DISTINCT status) StatusCount, 
        MIN(status) MinStatus 
      FROM YourTable 
      GROUP BY name) B 
    ON A.name = B.name 
ORDER BY CASE WHEN StatusCount = 1 AND MinStatus = 'fail' THEN 1 
     WHEN StatusCount = 2 THEN 2 
     ELSE 3 END, A.name, A.status 
0

Если MySQL

select *, 0 as o 
from t 
union all 
select *, 1 as o 
from t 
order by 
    o = 1 and status != 'fail', o != 1, status = fail