Сгруппированный ранг номер сервера SQL - PullRequest
1 голос
/ 19 июля 2011

у меня есть стол как

  ID |  Name  |  Rank
    1  Name1  
    2  Name2  
    1  Name3  
    2  Name4  
    3  Name5  
    1  Name6
    1  Name7

Мой результат должен быть таким:

  ID |  Name  |  Rank
    1  Name1     1
    2  Name2     1 
    1  Name3     2
    2  Name4     2 
    3  Name5     1 
    1  Name6     3
    1  Name7     4

Я нашел это: Ранжирование (порядок по имени), но оно будет ранжировать всю таблицу. Как мне сделать ранг, сгруппированный по идентификатору?

UPDATE:

Простите, ребята. Майкл Эймс дал совершенно правильный ответ. Но мне нужно то же самое с условием ГДЕ. Я неправильно истолковал вопрос, и мне жаль. Настоящий вопрос заключается в следующем: Поэтому мне нужно ранжировать все имена, где у клиента не нулевой порядок, по группе имен по идентификатору У меня есть эти таблицы:

   ID |  Name  |  Client | Rank
        1  Name1  Client1
        2  Name2  NULL
        1  Name3  Client2
        2  Name4  Client3
        3  Name5  Client4
        1  Name6  NULL
        1  Name7  Client5

Мой результат должен быть таким:

      ID |  Name |  Client | Rank
        1  Name1  Client1     1
        2  Name2  NULL
        1  Name3  Client2     2
        2  Name4  Client3     1
        3  Name5  Client4     1
        1  Name6  NULL        
        1  Name7  Client5     3

1 Ответ

5 голосов
/ 19 июля 2011

Легкий Писи:

Следующий пример ранжирует каждое имя, сгруппированное по его идентификатору:

SELECT ID, Name, Rank() OVER (PARTITION BY ID ORDER BY Name ASC) as Rank
FROM Names
ORDER BY Name ASC

В следующем примере ранжируются все имена, сгруппированные по их идентификатору, но пропускаются записи, в которых значение Client равно нулю:

SELECT ID, Name, Client, Rank() OVER (PARTITION BY ID ORDER BY Name ASC) as Rank
FROM Names 
WHERE Client IS NOT NULL

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

UPDATE Names 
SET Rank = ranks.rank
FROM
  (SELECT ID, Name, Client, Rank() OVER (PARTITION BY ID ORDER BY Name ASC) as Rank
  FROM Names 
  WHERE Client IS NOT NULL
  ) ranks
WHERE Names.Name = ranks.Name

В последнем примере, если Имя не уникально, вы, скорее всего, захотите изменить предложение WHERE, чтобы оно совпадало с уникальным идентификатором.

Некоторая достаточно понятная документация здесь: http://msdn.microsoft.com/en-us/library/ms176102.aspx

Удачи!

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