2013-10-07 2 views
-1

У меня есть таблица, 2 колонки выглядеть следующим образом:Обновить колонку paratitioned другой колонке

basedon      line 
MM2013000028 
MM2013000028 
MM2013000028 
MM2013000029 
MM2013000030 
MM2013000030 

Номер строки в настоящее время пустой, но должно быть:

basedon     line 
MM2013000028    001 
MM2013000028    002 
MM2013000028    003 
MM2013000029    001 
MM2013000030    001 
MM2013000030    002 
+3

Какие базы данных? –

ответ

3

Это, как вы получите номер строки (разделены baseon) и обновить результирующий набор:

WITH r_SomeTable 
AS 
(
SELECT * 
, row_number() over(partition by baseon order by baseon) as rnk 
FROM SomeTable 
) 

UPDATE r_SomeTable 
SET line = rnk 
GO 

Вы можете посмотреть на этот вопрос для более Detai лс
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/ee06f451-c418-4bca-8288-010410e8cf14/update-table-using-rownumber-over

+0

Как вы знаете, что OP использует SQL Server? – Kermit

+2

@FreshPrinceOfSO, многие люди, которые используют Microsoft SQL Server, отмечают только свои вопросы 'sql'. Таким образом, это не необоснованное предположение по умолчанию. –

+0

@BillKarwin Я стараюсь избегать предположений. – Kermit

0
UPDATE MyTableName 
SET line = ISNULL(SELECT MAX(line) FROM MyTableName, 0) + 1 
1

Я хотел бы предложить вам сделать line field an integer type, а не строки. Вы всегда можете выбирать данные по мере необходимости с передними нулями. Или, если это предназначено для презентации, вы должны сделать это в клиентском приложении.

Если вы на Sql-Server попробовать что-то вроде этого (Fiddle Demo):

Declare @Number int = 0 
Update t set @Number = line = @Number + 1 

--Assuming you have only 999 records (i.e 3 digits). 
--Please modify as needed. 
Select basedon, right('00' + convert(varchar(2), line),3) line 
from t 
Смежные вопросы