Использование оператора «WITH OVER» - Как начать новый порядковый номер при запуске другой группы записей? - PullRequest
2 голосов
/ 11 августа 2010

Использование WITH OVER или использование другого метода, как запустить новый порядковый номер для другой группы записей?

Это SQL Server 2005.

Например, какполучить следующий вывод (я говорю о столбце RowNum в ожидаемом выводе)?

Таблица:идентификатор

100 А200 В300 С200 В200 В

Ожидаемый выход:

RowNum id1 1001 2002 2003 2001 300

Ответы [ 3 ]

4 голосов
/ 11 августа 2010

Вы ищете PARTITION BY, проверьте это.

Create table #test
( 
  i int
  )

  INSERT INTO #test
  SELECT 100 UNION ALL
  SELECT 200 UNION ALL
  SELECT 300 UNION ALL
  SELECT 200 UNION ALL
  SELECT 200

  SELECT I, ROW_NUMBER() OVER (PARTITION BY I ORDER BY i ASC) FROM #test
2 голосов
/ 11 августа 2010
ROW_NUMBER() OVER (PARTITION BY ... ORDER BY ...)

В вашем примере нет четкого ORDER BY или PARTITION BY ожидаемого результата. Оба могут быть либо id, либо name. Лучшим примером будет:

Таблица:

id type 
1  100  
2  200  
3  300  
4  200  
5  200   

Ожидаемый:

rn id type 
1  1  100  
1  2  200  
2  4  200  
3  5  200   
1  3  300  

, что соответствует ROW_NUMBER() OVER (PARTITION BY type ORDER BY id)

1 голос
/ 11 августа 2010
declare @MyTable table (
        id int,
        name char(1)
    )

    insert into @MyTable
        (id, name)
        values
        (100,'A')
    insert into @MyTable
        (id, name)
        values
        (200,'B ')
    insert into @MyTable
        (id, name)
        values
        (300,'C') 
    insert into @MyTable
        (id, name)
        values
        (200,'B')
    insert into @MyTable
        (id, name)
        values
        (200,'B')

    select id, row_number() over(partition by id order by id) as RowNum
        from @MyTable
...