我正在两张桌子上加入.一个是用户的表,另一个是高级用户列表.我需要在我的查询中首先显示高级会员.但是,仅仅因为它们在高级用户表中并不意味着它们仍然是高级成员 - 还需要检查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)
尝试ORDER BY CASE
ORDER BY CASE WHEN PremiumUsers.IsActive = 1 THEN 1 WHEN PremiumUsers.UserId IS NULL THEN 2 ELSE 3 END
ORDER BY COALESCE(PremiumUsers.IsActive, 0) DESC
这将使用非活动对NULL进行分组.