我有一个表格,其中2列是这样的:
basedon line
MM2013000028
MM2013000028
MM2013000028
MM2013000029
MM2013000030
MM2013000030
行号目前为空白,但应为:
basedon line
MM2013000028 001
MM2013000028 002
MM2013000028 003
MM2013000029 001
MM2013000030 001
MM2013000030 002
答案 0 :(得分: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
您可以查看此问题以获取更多详细信息:
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/ee06f451-c418-4bca-8288-010410e8cf14/update-table-using-rownumber-over
答案 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
答案 2 :(得分:0)
UPDATE MyTableName
SET line = ISNULL(SELECT MAX(line) FROM MyTableName, 0) + 1