您可以告诉我如何使用SQL在MS Access数据库中执行以下操作。?
我有一个看起来像这样的表:
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做到这一点吗?在MS Access数据库中。
先谢谢
答案 0 :(得分: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
OR
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
答案 1 :(得分:1)
创建SQL语句到更新 Sort_Number
具有挑战性。但是,VBA的程序非常简单。我在Access 2007中使用名为“ Plans ”的表中的示例数据对此进行了测试。在下面的“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