更新由另一列配对的列

时间:2013-10-07 16:06:40

标签: sql

我有一个表格,其中2列是这样的:

basedon                        line
MM2013000028
MM2013000028
MM2013000028
MM2013000029
MM2013000030
MM2013000030

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

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

3 个答案:

答案 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