2017-02-07 2 views
2

Я отправляю пример данных ниже.Рейтинг по Row_Number в SQL

enter image description here

То, что у меня есть строка номер, который генерируется ряд на основе даты и столбцов Имя (достигается с помощью функции ROW_NUMBER). Теперь мне нужен другой производный столбец с именем Group_Num, который создает число для каждой группы (в этом случае 3). Можно ли это сделать, учитывая тот факт, что мой столбец имени повторяется, но значение столбца «Дата» изменяется?

Заранее спасибо.

+3

Пожалуйста, удалите картинку и добавить данные примеры, как DDL + DML, а также показать запрос, который у вас есть. –

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

ответ

3

Проверьте это. Мы можем добиться этого с помощью Row_number(), lag() и SUM().

 select 
     Date, 
     Name, 
     Row_number()over(partition by Group_Num order by ROwiD) Row_Num, 
     Group_Num 
     from 
     (
      SELECT * , 
      SUM(R) OVER(ORDER BY RowID) Group_Num 
      FROM 
      (
       select *, 
       Case When 
       lag(name) OVER (ORDER BY RowID) = name 
       then 0 else 1 end as R 
       from 
        (
         select DATE,NAME, 
         row_number() OVER ( ORDER BY (select 1)) AS 'RowID' 
         from #TableName 
        )A 
      )B 
     )C 
     order by ROwiD 

Выход:

enter image description here

+0

Спасибо за ваш ответ. Но если я использую это, он вернет Group_Num как «1» для последних 3 строк. Мне это нужно как 3 (хотя имя такое же). –

2

Вы можете использовать DENSE_RANK:

SELECT Date 
    , Name 
    , ROW_NUMBER() OVER(Partition By Name Order By Name, Date) as Row_Num 
    , DENSE_RANK() Over(order by Name) as Group_Num 
FROM #Table 
+0

Спасибо за ваш ответ. Но если я использую это, он вернет Group_Num как «1» для последних 3 строк. Мне это нужно как 3 (хотя имя такое же). –

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

  • Нет связанных вопросов^_^