Oracle-SQL назначает одинаковый номер строки для строк с повторяющимися значениями в одном столбце - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть таблица containing FileName, CustomerName, Address, Отношения и индекс.Я хочу назначить порядковый номер для каждой строки, но два клиента (основной и дополнительный) в одном и том же файле, совместно использующие один и тот же адрес, должны будут использовать порядковый номер, как показано ниже:

FILE    CUSTOMER    ADDRESS Relationship    INDEX   SEQUENCE
1          A           XX      Primary        1        1
1          B           XX      Secondary      2        1
1          C           XX      Primary        3        2
1          D           XX      Secondary      4        2
1          E           XX      Primary        5        3
1          F           XX      Secondary      6        3

Я пыталсяиспользуя DENSE_RANK () OVER (PARTITION BY FILE, ADDRESS ORDER BY INDEX) AS SEQUENCE Но вывод все еще не такой, как показано выше.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

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

ROW_NUMBER() OVER (PARTITION BY FILE, ADDRESS, RELATIONSHIP ORDER BY INDEX) AS SEQUENCE

Обратите внимание, что здесь используется ROW_NUMBER() вместо DENSE_RANK().Галстуки, похоже, не проблема.

0 голосов
/ 25 сентября 2018

Вы можете попробовать использовать lead оконную функцию для получения следующей строки INDEX в подзапросе ORDER BY Relationship.

Затем используйте SUM оконную функцию для расчета.

SELECT 
    "FILE",
    CUSTOMER,
    ADDRESS,
    "INDEX",
    "Relationship",
    SUM(CASE WHEN "INDEX" = 'Primary' AND nextVal = 'Secondary' THEN 1 ELSE 0 END) OVER(ORDER BY "Relationship") SEQUENCE
FROM (
SELECT t1.*,lead("INDEX") OVER (PARTITION BY "FILE", ADDRESS ORDER BY "Relationship") AS nextVal
FROM T t1
) t1

SQLFIDDLE

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