2012-02-10 5 views
1

申し訳ありませんが、タイトルはあまり説明的ではありませんが、それは単語にとって難しい問題です。各パケットの識別子を作成するクエリ

私はいくつかのデータ、約200以上の行を持っており、各行はPacketIDを持っているので、いくつかの行は同じパケットに属しています。私がする必要があるのは、パケット識別子xを持つすべてのエントリが3というパケット識別子を持つ必要があるように、すべてのPacketIDを(例 - BDFD-2)から数(例 - 1)に変換することです。これを行うことができるSQLクエリですか?それとも、私は手作業で行かなければならないのですか?

+0

アクセスにインポートされた単純なエクセル1 –

答えて

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 

私はそのようなアプローチは、1回の変換のための細かなことができると思い。ただし、これが繰り返し実行する必要がある操作の場合は、より複雑になる可能性があります。特に、各PacketIDが1つの実行から次の実行に同じ番号で置き換えられる必要がある場合など。 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があります –

+0

適用する必要のある論理的な変換はありますか?もしそうなら、何?例えば。 'AAAA-1'を' 2'に変換する必要があります。 'AAAA-'は破棄でき、 '1'はインクリメントされますか? – Joe

+0

しかし、とにかくThxだけど) –

0

パケットIDを数字に変換する理由がわからないのですが、完全に正常であるようです。

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

あなたはその後、あなたは、クエリについて尋ね対応する行

+0

はい、私はこのクライアントからのデータを他のすべてのクライアントからのデータと同じフォーマットにしてシステムに入力できるようにする必要があります。他のすべてのクライアントのpacketIDは単純な番号です –

関連する問題