代码之家  ›  专栏  ›  技术社区  ›  David

以特定方式排序Select子句结果

  •  4
  • David  · 技术社区  · 16 年前

    我需要帮助写一本书 选择

    例如,假设我有这样一个查询:

    select value from some_table order by value asc;
    

    结果我得到了:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    

    但我想写的一个特别的问题,仍然会给我 已排序 5 之后 8

    这意味着我需要一个值 有规律的

    可以用另一种方式来描述。假设我有两组数字(例如): 我有一个群C=aubu{78} 我需要所有这些值按“A,78,B”排序

    4 回复  |  直到 16 年前
        1
  •  9
  •   dcp    16 年前

    SELECT *
      FROM tbl
    ORDER BY
           CASE
             WHEN value = 5 THEN 8.5
             ELSE value
           END
    
        2
  •  2
  •   DRapp    16 年前

    或是扩展DCP的答案。。。

    SELECT * 
      FROM tbl 
    ORDER BY 
           CASE 
             WHEN (Condition for first grouping) THEN 1
             WHEN (Condition for second grouping) THEN 2
             WHEN (Condition for third grouping) THEN 3
             ELSE 4
           END 
    
        3
  •  2
  •   Mark Byers    16 年前

    ORDER BY (value BETWEEN 1 AND 118) AND value != 78 DESC,
             value > 118 DESC,
             value
    

    这将确保匹配第一个谓词的值首先出现,然后是匹配第二个谓词的值,最后是不匹配任何谓词的值。如果有一个tie(两个数字匹配同一谓词),那么这些数字将按升序排序。

    注意,我还没有在Oracle中测试过这个。可能需要将谓词包装在CASE表达式中 (CASE WHEN predicate THEN 1 ELSE 0 END)

    ORDER BY
        (CASE WHEN ((value BETWEEN 1 AND 118) AND value <> 78) THEN 1 ELSE 0 END) DESC,
        (CASE WHEN (value > 118) THEN 1 ELSE 0 END) DESC,
        value
    
        4
  •  0
  •   pascal    16 年前