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