对不起,标题不是很具描述性,但这是一个棘手的问题。
我有一些数据,大约200行或更多行,每行都有一个PacketID,所以有几行属于同一个数据包。我需要做的是将所有PacketID从(示例 - BDFD-2)转换为只是一个数字(例1),因此所有带有数据包标识符x的条目都需要有一个数据包标识符为3.是否存在SQL查询可以做到这一点?或者我只需要手动完成。
答案 0 :(得分:2)
您询问了一个查询。我写了一个快速的VBA程序,只是因为它很容易。但我不确定它是否适合你的情况。
我使用new_PacketID的数字列创建了tblPackets。我希望能更清楚地看到发生了什么。如果您确实需要使用新号码替换PacketID,则可以更改将CStr(lngPacketID)
存储到该文本字段的过程。所以这是我开始使用的示例数据:
PacketID new_PacketID packet_data
BDFD-2 a
R2D2-22 aa
BDFD-2 b
R2D2-22 bb
EMC2-0 aaa
EMC2-0 bbb
这是运行程序后的表。
PacketID new_PacketID packet_data
BDFD-2 1 a
R2D2-22 3 aa
BDFD-2 1 b
R2D2-22 3 bb
EMC2-0 2 aaa
EMC2-0 2 bbb
代码......
Public Sub RenumberPacketIDs()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lngPacketID As Long
Dim strLastPacketID As String
Dim strSql As String
strSql = "SELECT PacketID, new_PacketID" & vbCrLf & _
"FROM tblPackets" & vbCrLf & _
"ORDER BY PacketID;"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSql)
With rs
Do While Not .EOF
If !PacketID <> strLastPacketID Then
lngPacketID = lngPacketID + 1
strLastPacketID = !PacketID
End If
.Edit
!new_PacketID = lngPacketID
.Update
.MoveNext
Loop
.Close
End With
Set rs = Nothing
Set db = Nothing
End Sub
我认为这样的方法对于一次性转换可能没问题。但是,如果这是您需要重复执行的操作,则可能会更复杂...尤其是如果您需要将每个PacketID替换为从一次运行到下一次运行的相同数字...例如。 BDFD-2第一次被1替换,因此每次运行该程序时必须替换为1。
答案 1 :(得分:0)
如果您只有几个数据包ID,则可以使用update:
UPDATE table_name
SET PacketID =
(
CASE PacketID
WHEN 'BDFD-2' THEN 3
WHEN 'ABCD-1' THEN 5
ELSE 2
END
)
ELSE
是可选的。
答案 2 :(得分:0)
我不确定为什么你甚至想把数据包ID转换为数字,它们看起来完全没问题。您可以按如下方式创建数据包表
SELECT DISTINCT TableOfRows.Packet_id AS PacketId INTO Packets FROM TableOfRows;
然后,您可以使用它来选择您感兴趣的数据包并显示相应的行