Агрегация строк в Oracle с использованием ROW_NUMBER () - PullRequest
0 голосов
/ 12 декабря 2018

В настоящее время я использую 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

Мне понадобятся CAR1 и CAR2, чтобы всегда быть сверху (seq_num = 1 и seq_num = 2) в терминах seq_num (вышеpirority), а остальные будут следовать за seq_num 3,4,5,6 и далее.

1 Ответ

0 голосов
/ 12 декабря 2018

Используйте выражение регистра, чтобы повлиять на порядок, вот пример:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...