代码之家  ›  专栏  ›  技术社区  ›  Roman Kagan mianos

如何在SQL查询中设置条件逻辑来改变优先级?

  •  4
  • Roman Kagan mianos  · 技术社区  · 15 年前

    如何在SQL查询中设置条件逻辑来改变优先级?

    例如,如果我的表中有“id”、“name”、“event_id”等列,并且我有180、181、270、271等不同的“event_id”,我需要按这样的顺序排序:“event_id”270的行将位于顶部,那么“event_id”271的行以及其余数据将按“id”列降序排序。

    3 回复  |  直到 15 年前
        1
  •  8
  •   Jeffrey Kemp    15 年前

    我更喜欢这种情况:

    ORDER BY CASE event_id WHEN 270 THEN 0
                           WHEN 271 THEN 1
             END NULLS LAST,
             id DESC;
    

    但有时我会使用译码,这样就不那么复杂了:

    ORDER BY DECODE(event_id, 270, 0,
                              271, 1,
                              2),
             id DESC;
    
        2
  •  13
  •   zerkms    15 年前

    使用case语句执行所需的命令

    ORDER BY
    CASE
        WHEN event_id = 270 THEN 0
        WHEN event_id = 271 THEN 1
        ELSE 2
    END,
    id DESC
    
        3
  •  0
  •   Marcus Adams    15 年前

    如果只有一个案例,下面是一个简单的方法:

    ORDER BY event_id <> 270 ASC, event_id ASC
    

    表达式 event_id <> 270 对于false,计算结果为0;对于true,计算结果为1。