Условный порядок SQL

Я делаю объединение двух таблиц. Одна — это таблица пользователей, а другая — список премиум-пользователей. Мне нужно, чтобы премиум-члены отображались первыми в моем запросе. Однако то, что они находятся в таблице премиум-пользователей, не означает, что они все еще являются премиум-участниками — есть поле IsActive, которое также необходимо проверить.

Итак, в основном мне нужно вернуть результаты в следующем порядке:

  • Активные премиум-пользователи
  • Обычные и неактивные премиум-пользователи

Сейчас у меня это выглядит следующим образом:

SELECT Users.MemberId, PremiumUsers.IsActive FROM Users
LEFT JOIN PremiumUsers ON PremiumUsers.UserId = Users.Id
ORDER BY PremiumUsers.IsActive DESC

Проблема в том, что неактивные премиум-члены помещаются выше не-премиум-членов.

(Я использую для этого MS SQL Server 2005)


person Arthur Chaparyan    schedule 25.11.2008    source источник


Ответы (2)


ORDER BY COALESCE(PremiumUsers.IsActive, 0) DESC

Это сгруппирует NULL с неактивными.

person Joel Coehoorn    schedule 25.11.2008

ПОПРОБУЙТЕ ПО СЛУЧАЮ

ORDER BY CASE
    WHEN PremiumUsers.IsActive = 1 THEN 1
    WHEN PremiumUsers.UserId IS NULL THEN 2
    ELSE 3
END
person devio    schedule 25.11.2008
comment
Я не могу поверить, что никогда не думал попробовать это ... хороший совет! - person John Rudy; 25.11.2008