2016-07-01 4 views
0

ImageКак обновить столбец Row_number по непустому ряду в другом столбце

У меня есть выбор, как на картинке. Мне нужно обновить столбец ROWNUM, например, как это будет нумеровать по столбцам TIN, как этот

RowNum  ...  TIN     (other columns) 
1   ...  01709199810113  (other data) 
      ... 
      ... 
2   ...  40705200210056 
      ... 
      ... 
3   ...  02803199610090 
      ... 
      ... 
4   ...  01007200310037 
5   ...  02603200410213 
6   ...  00904199310033 
+0

Вы говорите, вы хотите назначить номер строки для каждой строки с номером TIN? Если это так, просто запустите инструкцию update, например 'update T SET RowNum = RN FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY any) RN FROM tblName WHERE ISNULL (TIN, '') <> '') T' .. . Нет необходимости в циклах WHILE или что угодно. – ZLK

ответ

0
Update table 
Set row_number = tin 
Where tin != '' 

? 
+0

Нет, мне нужно начислить –

+0

Вы можете предоставить некоторую информацию, например, как решить этот вопрос. –

+0

извините, попробуйте помочь поздно ночью. не хотел путать вопрос – Duncan

0

Если я вас правильно понял, это то, что вам нужно:

DECLARE @COUNT INT; 
DECLARE @RNO INT; 
DECLARE @TIN VARCHAR(50); 
SET @COUNT = (SELECT COUNT * FROM TABLE); 

WHILE(@COUNT > 0) 
BEGIN 

SET @TIN = (SELECT TIN FROM TABLE WHERE RowNum = @COUNT); 
SET @RNO = (SELECT MAX(RowNum) FROM TABLE WHERE RowNum < @COUNT); 

IF(@TIN <> '') 
BEGIN 
UPDATE TABLE SET RowNum = (@RNO + 1) WHERE RowNum = @COUNT; 
END 
ELSE 
BEGIN 
UPDATE TABLE SET RowNum = 0 WHERE RowNum = @COUNT; 
END 

SET @COUNT = @COUNT - 1; 
END 
2

Вы можете использовать приведенные ниже запросы,

Для присвоения номера,

Update Alias SET RowNum = RN FROM (SELECT *, ROW_NUMBER() 
     OVER (ORDER BY Id) RN FROM YourTable WHERE ISNULL(TIN, '') <> '') Alias 

Для присвоения значения NULL,

Update YourTable SET RowNum = NULL WHERE ISNULL(TIN, '') = '' 

Вы можете оставить сообщение для дальнейших вопросов.

+0

У меня ошибка. Производная таблица «Псевдоним» не является обновляемой, потому что столбец производной таблицы является производным или постоянным. –

+0

@NursultanAidarkulov это значит ... это не сработало для вас! – Lucky

0

Я думаю, что это поможет для и

select case when(isnull(TIN,'')='') then Null else Row_Number() over(order by TIN) end p,* from [Your_Table_Name] 
where TIN is not null 
union 
select '' p,* from [Your_Table_Name] 
where TIN is null 
Смежные вопросы