2

こんにちは誰かが私にMSAccessデータベースのSQLで次のことを行う方法を教えてもらえますか?

私はこのようなテーブルを持っています:

MyTable

Plan    Item        Sort_Number
-------------------------------------
11026    ZSC1753D   
11018    PS13-2     
11026    ZSC1753B   
11018    PSHH278B   
11026    ZSO1753A   
11018    PS3169     
11027    ZSC1754B   
11027    ZSC1754A   
11026    ZSC1753A   
11026    ZSC1753C   

最初にプラン(列1)で並べ替え、次にアイテムの昇順(列2)で並べ替える必要があるテーブル(上記)があり、3番目の列の並べ替え番号に1からxxまでの連続番号を入力する必要があります。異なる計画のそれぞれについて。

したがって、最終的にソートされたテーブルは次のようになります。

MyTable

Plan    Item    Sort_Number
-------------------------------------
11018   PS13-2      1
11018   PS3169      2
11018   PSHH278B    3
11026   ZSC1753A    1
11026   ZSC1753B    2
11026   ZSC1753C    3
11026   ZSC1753D    4
11026   ZSO1753A    5
11027   ZSC1754A    1
11027   ZSC1754B    2

SQLでこれを行うことはできますか?MSAccessデータベース内。

前もって感謝します

4

2 に答える 2

3
UPDATE myTable d, 
    (SELECT Plan, Item, 
       (SELECT count(*) + 1 
        FROM myTable i 
        WHERE i.Plan = o.Plan and i.Item < o.Item) as Sort_Number
    FROM myTable o) as s
SET d.Sort_Number = s.Sort_Number
WHERE d.Plan = s.Plan and d.Item = s.Item

また

UPDATE myTable d INNER JOIN 
    (SELECT Plan, Item, 
       (SELECT count(*) + 1 
        FROM myTable i 
        WHERE i.Plan = o.Plan and i.Item < o.Item) as Sort_Number
    FROM myTable o) s
ON d.Plan = s.Plan and d.Item = s.Item
SET d.Sort_Number = s.Sort_Number

編集:これは効率的ではないことはわかっていますが、限られた数のレコードでは問題なく機能します。

EDIT2 : MS-Access でこのクエリを試していないことに注意してください。それがどのように行われるかについての情報を提供してくれることを願っています。

EDIT3 : 一時テーブルの使用

SELECT Plan, Item, 
       (SELECT count(*) + 1 
        FROM myTable i 
        WHERE i.Plan = o.Plan and i.Item < o.Item) as Sort_Number
INTO TEMPTABLEFORTEST
FROM myTable o

UPDATE myTable i 
INNER JOIN TEMPTABLEFORTEST o 
ON i.Plan = o.Plan and i.Item = o.Item set i.Sort_Number = o.Sort_Number

DROP Table TEMPTABLEFORTEST
于 2012-09-21T11:24:49.110 に答える
1

更新 する SQL ステートメントを作成するのSort_Numberは困難です。ただし、このための VBA 手順はかなり単純です。「プラン」という名前のテーブルのサンプルデータを使用して、Access 2007 でこれをテストしました。下の「FROM」行を実際のテーブル名に置き換えます。

Public Sub Update_Sort_Numbers()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim strSelect As String
    Dim lngCurrentPlan As Long
    Dim lngSortNum As Long

    strSelect = "SELECT p.Plan, p.Item, p.Sort_Number" & vbCrLf & _
        "FROM Plans AS p" & vbCrLf & _
        "ORDER BY p.Plan, p.Item;"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(strSelect)
    With rs
        Do While Not .EOF
            If rs!Plan <> lngCurrentPlan Then
                lngCurrentPlan = rs!Plan
                lngSortNum = 1
            End If
            Debug.Print !Plan, ![Item], lngSortNum
            .Edit
            !Sort_Number = lngSortNum
            .Update
            lngSortNum = lngSortNum + 1
            .MoveNext
        Loop
        .Close
    End With
    Set rs = Nothing
    Set db = Nothing
End Sub
于 2012-09-21T15:31:25.777 に答える