设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1852|回复: 3
打印 上一主题 下一主题

[Access本身] 排序问题请教

[复制链接]
跳转到指定楼层
1#
发表于 2016-5-16 13:55:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各们老师:
我有一个排序问题向大家请教如何实现,象下面有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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2016-5-16 16:40:42 | 只看该作者
查询做不到的。
即便用ado也是比较复杂的写法。需要先把top的前几个插入,再读取插入的记录中last那个,再回头find之前的排序……
最好用别的主键
-------------------------------------
此外,看不出这个有什么意义。Access是数据库,不是用来玩游戏的,甚至很多高级算法Access都不care。
3#
发表于 2016-5-16 23:08:53 | 只看该作者
本帖最后由 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]);”
4#
 楼主| 发表于 2016-5-17 14:59:23 | 只看该作者
谢谢!我试一下,这个做生产排序时为减少换线要用到的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-2 01:22 , Processed in 0.070192 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表