我有一个VBA脚本,它根据日期和时间在csv文件中以递增方式对行进行编号。时间行(文件按日期排序,然后是时间),我想转换为SQL脚本,所以我可以直接在数据库中对行进行编号,但我不知道从哪里开始。
VBA脚本从头开始,如果日期和时间列相同,则为所有行分配相同的ID号,那么当日期或时间更改时,它会增加数字,依此类推:
Private Sub eventID()
Dim event As Integer
event = 0
For i = 2 To 112543
If (Sheet1.Cells.Item(i, 2) = Sheet1.Cells.Item(i - 1, 2)) And (Sheet1.Cells.Item(i, 3) = Sheet1.Cells.Item(i - 1, 3)) Then
Sheet1.Cells.Item(i, 1) = event
Else
event = event + 1
Sheet1.Cells.Item(i, 1) = event
End If
Next i
End Sub
如何在SQL Server 2012中执行此操作? 我只有一个表,并且eventID列当前为空(NULL)等待填写。
答案 0 :(得分:3)
最好的方法是将数据加载到eventID
声明为identity
列的表中。这会在新数据输入时自动增加值。
如果无法做到这一点,您可以进行如下更新:
with toupdate as (
select t.*, row_number() over (order by date, time) as seqnum
from table t
)
update toupdate
set EventId = seqnum;
编辑:
如果日期/时间相同且您想要相同的号码,请使用dense_rank()
代替row_number()
:
with toupdate as (
select t.*, dense_rank() over (order by date, time) as seqnum
from table t
)
update toupdate
set EventId = seqnum;