2008-11-25 7 views
3

Je fais une jointure sur deux tables. L'un est la table d'un utilisateur, et l'autre une liste d'utilisateurs premium. J'ai besoin que les membres premium apparaissent en premier dans ma requête. Toutefois, le fait qu'ils figurent dans la table des utilisateurs premium ne signifie pas qu'ils sont toujours un membre premium - il existe également un champ IsActive à vérifier.SQL Ordre conditionnel par

Donc, fondamentalement, je dois retourner les résultats dans l'ordre suivant: les utilisateurs Premium actifs Utilisateurs réguliers et inactifs premium

En ce moment, je l'ai comme suit: SELECT Users.MemberId, PremiumUsers.IsActive DE Les utilisateurs LEFT JOIN PremiumUsers sUR PremiumUsers.UserId = Users.Id ORDER BY PremiumUsers.IsActive DESC

Le problème est qu'il place les membres premium non actifs ci-dessus non membres premium.

(j'utilise MS SQL Server 2005 pour cette)

Répondre

7
ORDER BY COALESCE(PremiumUsers.IsActive, 0) DESC 

qui groupe les valeurs NULL avec non-actifs.

12

essayer ORDER BY CASE

ORDER BY CASE 
    WHEN PremiumUsers.IsActive = 1 THEN 1 
    WHEN PremiumUsers.UserId IS NULL THEN 2 
    ELSE 3 
END 
+0

Je ne peux pas croire que je ne pensais jamais essayer ... belle astuce! –