2015-02-18 2 views
0

Мне нужно ROW_NUMBER, чтобы назначить данные конкретному пользователю, если выполнено условие.Получение ROW_NUMBER для повторения, если поле соответствует условию

ROW_NUMBER будет увеличиваться до тех пор, пока не будет найдено дублирующее значение. Когда дублирующее значение найдено, мне нужно, чтобы он использовал тот же ROW_NUMBER, пока не будет найдено новое значение.

Например ...

При использовании

SELECT ROW_NUMBER() OVER (ORDER BY COMPANY) AS rownum 
     ,Company 
     ,Contact 
    FROM TABLE 

Мы можем, очевидно, ожидать, этот результат

rownum  Company    Contact 
    1  BOB'S BURGERS  BOB 
    2  STEVE'S SARDINES  STEVE 
    3  STEVE'S SARDINES  JERRY 
    4  STEVE'S SARDINES  MARY 
    5  LARRY's LOBSTER  LARRY 
    6  CHRIS' COWS   CHRIS 

То, что я пытаюсь получить это. Всякий раз, когда название компании не изменения, повторите ROW_NUMBER и продолжают увеличивать число, когда компания меняет

rownum  Company    Contact 
    1  BOB'S BURGERS  BOB 
    2  STEVE'S SARDINES  STEVE 
    2  STEVE'S SARDINES  JERRY 
    2  STEVE'S SARDINES  MARY 
    3  LARRY'S LOBSTER  LARRY 
    4  CHRIS' COWS   CHRIS 

Я использую это условие, чтобы увидеть, если компания соответствует прежнему названию компании. Она возвращает значение 2, если условие истинно

ROW_NUMBER() OVER (PARTITION BY COMPANY ORDER BY COMPANY) AS SameCompany 

ответ

7

Вы хотите DENSE_RANK не ROW_NUMBER. Попробуйте следующее:

SELECT DENSE_RANK() OVER (ORDER BY COMPANY) AS rownum 
     ,Company 
     ,Contact 
    FROM TABLE 
+0

Не могу поверить, что все было так просто. Я ценю это! – jdidsQAA

+0

Нет проблем. Рад, что он работает! –

Смежные вопросы