使用ROW_NUMBER()

时间:2018-12-12 03:47:24

标签: sql database oracle

我目前正在使用ROW_NUMBER()和Order by子句来生成序列号(seq_num)以进行过滤。

SELECT ROW_NUMBER ()
   OVER (
      ORDER BY A.CARMODEL)
      AS seq_num,
   'A' AS SALES_CATEGORY,
   '1000' AS SALES_TARGET

如果我希望有一个预定义的CARMODEL列表在seq_num方面具有更高的优先级,那可能吗?我应该如何实现?

例如:

1   A   CAR1    1000
2   A   CAR2    1000
3   A   CAR3    1000
4   A   CAR4    1000
5   A   CAR5    1000
6   A   CAR6    1000

就seq_num(较高的pirority)而言,我将需要CAR1和CAR2始终位于顶部(seq_num = 1和seq_num = 2),然后其余部分将遵循seq_num 3、4、5、6并开始。 / p>

1 个答案:

答案 0 :(得分:2)

使用大小写表达式来影响顺序,下面是一个示例:

SELECT
    ROW_NUMBER()  OVER (ORDER BY
                         case when A.CARMODEL IN('car1','car2') then 1 else 2 end
                       , A.CARMODEL)
    AS seq_num
  , 'A'    AS SALES_CATEGORY
  , '1000' AS SALES_TARGET
FROM x

或:

SELECT
    ROW_NUMBER()  OVER (ORDER BY
                         case when A.CARMODEL = 'car1' then 1
                                   A.CARMODEL = 'car2' then 2
                              else 3 end
                       , A.CARMODEL)
    AS seq_num
  , 'A'    AS SALES_CATEGORY
  , '1000' AS SALES_TARGET
FROM x