Как сгенерировать значение индекса заказа (как в порядке списка) в операторе SELECT - PullRequest
3 голосов
/ 17 февраля 2012

Предположим, у меня есть две таблицы:

TABLEA          TABLEB
-----------     -----------
ID  | NAME      ID | TABLEA_ID  | NAME
1   |  ...      1  | 1          | ...
2   |           2  | 2          | ...
3   |           3  | 2          |
4   |           4  | 2          |
                5  | 3          |
                6  | 3          |
                7  | 4          | 
                8  | 2          | 

Мне нужен оператор SQL SELECT, который может генерировать такой результат, когда TABLEA.ID = TABLEB.TABLEA_ID, вы можете заметить, что меня не волнует группировка или упорядочение,Я просто хочу сгенерировать увеличенное значение для каждой строки того же TABLEB.TABLEA_ID.

ID | TABLEA_ID | ORDER_INDEX | NAME 
1  | 1         | 0           | ...  
2  | 2         | 0           | ...  
3  | 2         | 1           |      
4  | 2         | 2           |      
5  | 3         | 0           |      
6  | 3         | 1           |      
7  | 4         | 0           |      
8  | 2         | 3           |      

Я безуспешно пытался использовать rownum в несколькихкомбинация подвыборов для генерации ORDER_INDEX в зависимости от значения в TABLEA_ID.

  • У вас есть подсказка, чтобы сделать это в простом SQL, возможно ли это даже в простом SQL.
  • Возможно ли это через PL / SQL?А как по возможности?

Заранее большое спасибо.

Ответы [ 3 ]

3 голосов
/ 17 февраля 2012

Я считаю, что это то, что вы хотите:

SELECT B.ID, B.TABLEA_ID, 
       ROW_NUMBER() OVER(PARTITION BY B.TABLEA_ID ORDER BY B.ID) - 1 ORDER_INDEX,
       B.NAME -- OR A.NAME, its not clear on your question
FROM TABLEB B
LEFT JOIN TABLEA A
ON B.TABLEA_ID = A.ID
2 голосов
/ 17 февраля 2012

Примерно так:

SELECT
    TableB.ID,
    TableB.TableA_ID,
    ROW_NUMBER() OVER(PARTITION BY TableB.TableA_ID ORDER BY TableB.TableA_ID) AS ORDER_INDEX,
    TableB.Name
FROM
    TableA
    JOIN TableB
        ON TableA.ID=TableB.TableA_ID
ORDER BY TableB.ID
0 голосов
/ 17 февраля 2012

Как насчет

ROW_NUMBER() OVER (PARTITION BY TABLEA_ID ORDER BY ID ASC) AS ORDER_INDEX

как определение ORDER_INDEX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...