2013-06-03 3 views
3

Я бы хотел, чтобы ROW_Number() работал нормально, если поле UNLESS 'box' равно Null. Если «поле» равно null, номер строки не увеличивается.Объединить данные, если null

У меня есть данные, что выглядит следующим образом ...

Row Box 
1 5 
2 3 
3 1 
4 Null 
5 Null 
6 2 
7 8 
8 Null 
9 Null 

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

Row Box 
1 5 
2 3 
3 1 
3 Null 
3 Null 
4 2 
5 8 
5 Null 
5 Null 

Я стараюсь избегать использования курсор, но я не могу понять, как заставить это работать без него.

+1

Является ли строка фактическим именем столбца? – Paparazzi

ответ

3

Вы можете сделать это с помощью коррелированного подзапроса. Вот один из способов:

select (select count(box) from t t2 where t2.row <= t.row) as row, 
     box 
from t 
order by row; 

Это подсчет числа действительных значений box до заданной строки.

В SQL Server 2012, вы можете сделать это с нарастающим count():

select count(box) over (order by row) as row, box 
from t 
order by row; 

Они предполагают, что row устанавливается как в вопросе. Если row не начинается с этих значений, тогда у вас есть проблема. Таблицы SQL по своей сути являются неупорядоченными, и для указания порядка требуется столбец.

+1

добавить заказ по строке – Paparazzi

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