2012-02-10 46 views
1

對不起,標題不是很具描述性,但它是一個棘手的問題。查詢爲每個數據包創建一個標識符

我有一些數據,它有大約200或更多的行,並且每行都有一個PacketID,所以有幾行屬於同一個數據包。我需要做的是將所有PacketID從(Example - BDFD-2)轉換爲一個數字(示例-1),因此所有帶有數據包標識符x的條目都需要包含標識符爲3的數據包標識符。是否有可以做到這一點的SQL查詢?或者我只需要手動完成。

+0

只是一個簡單的excel導入到access – 2012-02-10 03:44:50

回答

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代替。

0

如果你只有幾包的ID,你可以使用更新:

UPDATE table_name 
    SET PacketID = 
     (
      CASE PacketID 
       WHEN 'BDFD-2' THEN 3 
       WHEN 'ABCD-1' THEN 5 
       ELSE 2 
      END 
     ) 

ELSE是可選的。

+0

對不起,有100多個唯一的數據包ID – 2012-02-10 03:53:47

+0

是否有一些邏輯轉換需要應用?如果是這樣,什麼?例如。你是否需要將AAAA-1轉換爲2,其中AAAA可以被丟棄,1被增加? – Joe 2012-02-10 03:56:34

+0

Thx無論如何雖然=) – 2012-02-10 03:57:10

0

我不知道爲什麼你甚至想將數據包ID轉換爲數字,他們看起來很不錯。可以按如下步驟

SELECT DISTINCT TableOfRows.Packet_id AS PacketId INTO Packets FROM TableOfRows; 

然後,您可以用它來選擇您感興趣的包,並顯示相應的行

+0

是的,除了我需要將來自此客戶端的數據轉換爲與其他每個客戶端的數據相同的格式,以便它可以輸入到系統中,並且每個其他客戶端的數據包ID都是一個簡單的數字 – 2012-02-10 04:18:42

相關問題