Как создать столбец RowNum в SQL Server? - PullRequest
2 голосов
/ 26 апреля 2009

В Oracle у нас есть «rownum». Что я могу сделать в SQL Server?

Ответы [ 3 ]

3 голосов
/ 26 апреля 2009

В SQL Server 2005 (и 2008) вы можете использовать функцию ROW_NUMBER в сочетании с предложением OVER, чтобы определить порядок, в котором следует подсчитывать строки.

Обновление

Хм. Я на самом деле не знаю, что делает версия Oracle. Если он дает вам уникальное число в строке (по всей таблице), то я не уверен, что есть способ сделать это в SQL Server. ROW_NUMBER () в SQL Server работает только для строк, возвращаемых в текущем запросе.

1 голос
/ 26 апреля 2009

Если у вас есть столбец id, вы можете сделать это:

select a.*, 
(select count(*) from mytable b where b.id <= a.id) as rownum
from mytable a
order by id;

Конечно, это работает только в том случае, если вы можете заказать rownums в том же (или противоположном) порядке, что и порядок идентификаторов.

Если вы выбираете правильное подмножество строк, конечно, вам необходимо применить один и тот же предикат ко всему выделенному и подзапросу:

select a.*, 
(select count(*) from table b where b.id <= a.id and b.foo = 'X') as rownum
from table a where a.foo = 'X'
order by id;

Очевидно, это не особенно эффективно.

0 голосов
/ 26 апреля 2009

Насколько я понимаю, вам нужно использовать функции ранжирования и / или предложение TOP . Возможности SQL Server специфичны, а Oracle объединяет две концепции.

Функция ранжирования проста: вот почему вы должны использовать TOP. Примечание: вы не можете ГДЕ на ROWNUMBER напрямую ...

'Orable:
select 
  column_1, column_2 
from 
  table_1, table_2
where
  field_3 = 'some value'
and rownum < 5

--MSSQL:
select top 4
  column_1, column_2 
from 
  table_1, table_2
where
  field_3 = 'some value'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...