【问题标题】:SQL Conditional Order BySQL 条件排序依据
【发布时间】:2008-11-25 18:16:03
【问题描述】:

我正在对两个表进行连接。一个是用户表,另一个是高级用户列表。我需要让高级会员首先出现在我的查询中。然而,仅仅因为他们在高级用户表中并不意味着他们仍然是高级会员 - 还有一个 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)

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    尝试按情况订购

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

    【讨论】:

    • 我不敢相信我从来没想过要尝试那个...不错的提示!
    【解决方案2】:
    ORDER BY COALESCE(PremiumUsers.IsActive, 0) DESC
    

    这会将 NULL 与非活动分组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2021-09-24
      相关资源
      最近更新 更多