SQL условный порядок по - PullRequest
3 голосов
/ 25 ноября 2008

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

Ответы [ 2 ]

12 голосов
/ 25 ноября 2008

попробуйте ЗАКАЗАТЬ ПО СЛУЧАЮ

ORDER BY CASE
    WHEN PremiumUsers.IsActive = 1 THEN 1
    WHEN PremiumUsers.UserId IS NULL THEN 2
    ELSE 3
END
7 голосов
/ 25 ноября 2008
ORDER BY COALESCE(PremiumUsers.IsActive, 0) DESC

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

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