|
楼主 |
发表于 2017-8-17 15:55
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
感谢hope9966老师
本帖最后由 autumnalRain 于 2017-8-17 16:46 编辑
等效于下面代码(经测试)
- Select 门店,商品编码,销售额,
- (select sum(b.销售额) from [销售表$]b where b.商品编码=a.商品编码 and b.门店<=a.门店) AS 累计销售额
- from [销售表$]a
- order by 商品编码,门店
复制代码
原帖http://club.excelhome.net/thread-1100847-1-1.html
hope9966老师解释如下:
这个案例,商品编码相同条件下,门店有4个,
由于组成‘门店’的汉字不同,二进制编码一定有大小之分,
"商品编码= '" & 商品编码 & " 'AND 门店<= '" & 门店 & "'"
这样比较大小后,最大的返回4个true,最小的返回1个true
DSUM("销售额","销售表$","商品编码= '" & 商品编码 & " 'AND 门店<= '" & 门店 & "'")
最大的返回4个true,即‘商品编码’相同的4个‘销售额’相加,DSUM返回这个相加值,成为“累计”字段的一项,对应二进制最大‘门店’这条记录。
同理:
最小的返回1个true,即‘商品编码’相同的,只满足相等条件的本身对应‘销售额’,DSUM返回这个值,成为“累计”字段的一项,对应二进制最小‘门店’这条记录。
同理:’门店‘第二大,第三大,由于二进制编码一定有大小之分,会返回3个true,2个true
最后通过:ORDER BY 商品编码,门店
让同一编码下,二进制码最小的先输出,给人一种累加的印像。
===============================================================================================================
按二进制编码比较: 天河店<海珠店<白云店<黄埔店
===============================================================================================================
(如果还是不明白,哪么,你不需要知道‘门店’是怎么比较大小的,你只要知道,它们不相同,一定有大有小,并且不相等,大小就有顺序)
如果改成子查询你看可以更好的理解:
select 门店,商品编码,销售额,
(select sum(b.销售额) from [销售表$]b where b.商品编码=a.商品编码 and b.门店<=a.门店)
from [销售表$]a order by 商品编码,门店
|
-
|