代码之家  ›  专栏  ›  技术社区  ›  Arthur Chaparyan

SQL条件排序依据

  •  3
  • Arthur Chaparyan  · 技术社区  · 17 年前

    我在两张桌子上做一个连接。一个是用户表,另一个是高级用户列表。我需要让高级会员首先出现在我的查询中。但是,仅仅因为它们在“高级用户”表中并不意味着它们仍然是高级成员-还有一个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 回复  |  直到 7 年前
        1
  •  7
  •   Joel Coehoorn    17 年前
    ORDER BY COALESCE(PremiumUsers.IsActive, 0) DESC
    

    将空值分组为非活动。

        2
  •  12
  •   devio    17 年前

    尝试按案例排序

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