Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

查询中实现分组排名的问题?

hwm0077  发表于:2012-12-04 01:31:42  
复制

如何实现分组排名??     实例点击下载此附件

下图左边“表A”是实际数据表,想在查询中得到一个排名的列(如右图)。

说明:1、“表A”中的“单号”代表一天的单据号,比如“120101”这天A、B、C三个小组都有销售。

         2、右表的“销售排名”列是指A、B、C三个小组在一天中的销售名次,“排名规则”是“金额”从高到低、如果金额相等则销售数量”少的排在前面


问题:如何实现右边的查询??   (表的实际记录很多,不能手工输入)


 

Top
在水一方 发表于:2012-12-04 13:38:12
hwm0077 发表于:2012-12-04 16:21:23

谢谢“在水一方”老师,有个细节就是同一“单号”如果金额相同,则要以“销售数量”少的排在前面。

比如右表中第二个红圈“120103”单,A、B小组的“金额”都是 500,A小组“销售数量”是 5、B小组“销售数量”是 4,所以 A 小组排名是 2、B小组排名是 1

麻烦老师给与完善,谢谢了!



西出阳关无故人 发表于:2012-12-04 18:51:31
参见附件的“查询1”,也是用1楼的附件改编的点击下载此附件

西出阳关无故人 发表于:2012-12-04 19:01:47

可以基本实现楼主的要求,只是数量和金额都相同的时候,结果是并列的名次(有并列第一名的时候显示排名为2、2、3;有并列第二名的时候显示排名为1、2、2)。

首先是要确定某个单号有多少相同的金额(见“查询2”),便于查询1分别针对是否有相同的金额来使用不同的比较方式。

这种方法,如果数据量很大的话,特别难于运行。



西出阳关无故人 发表于:2012-12-04 19:06:17

需要楼主定义有并列排名的排名处理方式,便于下一步处理

 



hwm0077 发表于:2012-12-05 02:17:17

谢谢“西出阳关无故人”老师,只是老师的方法需要增加一个“查询2”,我修改了一下只需一个查询及可解决,如果两个比较字段都相同可增加字段 IIF 嵌套即可。点击下载此附件


老师的SQL语句:SELECT 表A.单号, 表A.销售小组, 表A.商品类别, 表A.销售数量, 表A.金额, 表A.商品销售分类变化差值,

                        IIf(DLookUp("单号之计算","查询2","金额=" & [金额] & " and 单号='" & [单号] & "'")>1,

                       DCount("单号","表A","金额>=" & [金额] & " and 销售数量<=" & [销售数量] & " and 单号='" & [单号] & "'"),

                       DCount("单号","表A","金额>=" & [金额] & " and 单号='" & [单号] & "'")) AS 名次
                        FROM 表A;


修改后SQL语句:SELECT 表A.单号, 表A.销售小组, 表A.商品类别, 表A.销售数量, 表A.金额, 表A.商品销售分类变化差值, 

                        IIf(DCount("单号","表A","金额=" & [金额] & " and 单号='" & [单号] & "'")=1,

                       DCount("单号","表A","金额>=" & [金额] & " and 单号='" & [单号] & "'"),

                       DCount("单号","表A","金额>=" & [金额] & " and 销售数量<=" & [销售数量] & " and 单号='" & [单号] & "'")) AS 名次

                       FROM 表A;


谢谢二位老师,我又学到了新技巧!



总记录:6篇  页次:1/1 9 1 :