-1

我有一个表,其中 2 列如下所示:

basedon                        line
MM2013000028
MM2013000028
MM2013000028
MM2013000029
MM2013000030
MM2013000030

行号当前为空白,但应为:

basedon                   line
MM2013000028              001
MM2013000028              002
MM2013000028              003
MM2013000029              001
MM2013000030              001
MM2013000030              002
4

3 回答 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

您可以查看此问题以获取更多详细信息:
http ://social.msdn.microsoft.com/Forums/sqlserver/en-US/ee06f451-c418-4bca-8288-010410e8cf14/update-table-using-rownumber-over

于 2013-10-07T16:37:49.503 回答
1

我建议你制作line field an integer type而不是字符串。您始终可以根据需要使用前零选择数据。或者,如果它是出于演示目的,您应该在客户端应用程序上执行此操作。

如果您正在Sql-Server尝试这样的事情(小提琴演示):

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
于 2013-10-07T17:16:10.897 回答
0
UPDATE MyTableName
SET line = ISNULL(SELECT MAX(line) FROM MyTableName, 0) + 1
于 2013-10-07T16:51:12.620 回答