SQLsorting表和更新列

嗨任何人都可以告诉我如何使用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)sorting,然后按升序顺序的项目(第2列)和第三列sorting号码需要填充序号为1至xx ..为每个不同的计划。

所以最后的sorting表将如下所示:

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数据库。

提前致谢

 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 

编辑 :我知道这不是有效的,但它将工作没有任何问题的有限的logging数量。

编辑2 :请注意,我没有在MS-Access中试过这个查询。 我希望能给你提供有关如何完成的意见。

编辑3 :使用临时表

 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 

创build一个SQL语句来更新 Sort_Number是有挑战性的。 但是,这个VBA程序相当简单。 我在Access 2007中用示例数据在名为“ 计划 ”的表中testing了这一个。 在下面的“FROM”行中replace您的真实表名。

 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