Office中国论坛/Access中国论坛

标题: 排序问题请教 [打印本页]

作者: tianya0073    时间: 2016-5-16 13:55
标题: 排序问题请教
各们老师:
我有一个排序问题向大家请教如何实现,象下面有A、B两列,排序首先以A列按大小排序,然后B列基本也按大小排序,但在B列
根据A列进入下一组时,如下一组有和本组相同的值,则将这个值放在第一,其余按大小排列,如:A列1,1,1 这组,B列按a,b,c 大小排序,
进入A列2,2,2这组,B列按c,a ,b 排列。
谢谢!

A
B
1
a
1
b
1
c
2
c
2
a
2
b
3
b
3
a
3
c
3
d
4
a
4
b
4
c
5
a
5
b
6
b
6
a
6
c
6
d


作者: roych    时间: 2016-5-16 16:40
查询做不到的。
即便用ado也是比较复杂的写法。需要先把top的前几个插入,再读取插入的记录中last那个,再回头find之前的排序……
最好用别的主键
-------------------------------------
此外,看不出这个有什么意义。Access是数据库,不是用来玩游戏的,甚至很多高级算法Access都不care。
作者: cgsilicone    时间: 2016-5-16 23:08
本帖最后由 cgsilicone 于 2016-5-17 08:42 编辑

定义一个函数,就可以用查询得到要求的结果。

Function 排序(A列数据 As String, B列数据 As String)

Set 数据表 = CurrentDb.OpenRecordset("SELECT A FROM 表 GROUP BY A ORDER BY A")

临时数据1 = ""

Do While 数据表!A <> A列数据
   
    临时数据2 = DLookup("Max(B)", "表", "A='" & 数据表!A & "'")
   
    If 临时数据1 <> 临时数据2 Then
      
       临时数据1 = 临时数据2
   
    Else
      
       临时数据1 = DLookup("Max(B)", "表", "A='" & 数据表!A & "' and B<>'" & 临时数据2 & "'")
   
    End If
   
    数据表.MoveNext

Loop

If 临时数据1 = B列数据 Then 排序 = "0" & B列数据 Else 排序 ="1" & B列数据

End Function

然后一个查询就可以了  “SELECT 表.* FROM 表 ORDER BY 表.A, 排序([A],[B]);”
作者: tianya0073    时间: 2016-5-17 14:59
谢谢!我试一下,这个做生产排序时为减少换线要用到的。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3