Office中国论坛/Access中国论坛

标题: 交叉查询列排序例子 [打印本页]

作者: 咱家是猫    时间: 2011-10-24 22:51
标题: 交叉查询列排序例子
本帖最后由 咱家是猫 于 2011-10-24 22:59 编辑

几个朋友在ACCESS HOME群里问关于服装尺码与颜色多属性交叉查询出来的结果,尺码做为列标题后顺序无法从XS到XXXL自动排序.
原数据表数据如下图:
[attach]47065[/attach]

想得到的查询结果如下图:
[attach]47066[/attach]

于是我做了个例子给他们,我想这种主题在论坛上前辈肯定早已有发过,但既然例子也做出来了,就索性再具体讲下如何实现吧.
首先,我们可以利用查询向导生成一个交叉查询(当然,也可以自己在查询设计网格中编辑一个),下面依据照顾新手的原则,我帖出用查询向导制作的步骤图.

1 查询向导按钮在Access 2010里的位置,点击它.
[attach]47067[/attach]

2 在查询向导的第一步里选择交叉查询,然后确定
[attach]47068[/attach]

2.5 呵呵...发完帖子发现跳了一幅截图,那它就是2.5步骤吧. 这一步其实是选择数据来源,这例子中就只有一个表了.
[attach]47069[/attach]

3 选择以"颜色"做行标题,然后下一步.
[attach]47070[/attach]

4 选择以"尺码"为列标题,然后下一步:
[attach]47071[/attach]

5 选择以"数量"的合计(Sum)为值,然后下一步:
[attach]47072[/attach]

6 最后完成,打开查看查询结果.
[attach]47073[/attach]

7 这就是利用向导的引导下制作的一个交叉查询的结果:
[attach]47074[/attach]

8 现在就发现,上面的列标题有点乱,不是自己想要的从最小到最大尺码的排列顺序,怎么办?
打开刚刚生成的交叉查询的设计视图(如何打开设计视图?你可以在查询名上用右键单击,会有"设计视图"命令的.),然后在切换到SQL视图.如何切换,看下图找到SQL视图切换按钮.
[attach]47075[/attach]

9 至此,我们会看到几行SQL语句,这就是刚刚那个交叉查询的语句,语句如下:
TRANSFORM Sum(物品库存表.[数量]) AS 数量之合计
SELECT 物品库存表.[颜色], Sum(物品库存表.[数量]) AS [总计 数量]
FROM 物品库存表
GROUP BY 物品库存表.[颜色]
PIVOT 物品库存表.尺寸;

在语句的最后一行,是"PIVOT"行,现在,我们在它的"PIVOT"中强行设定对列的顺序,把最后一行改成:
PIVOT 物品库存表.尺寸 IN ("XS","S","M","L","XL","XXL","XXXL")

OK,保存查询设计,关闭查询设计,再打开那个查询.就成了帖子开头的满意的结果了.

赋上例子,两个Access版本的,2003与2007/2010的.
[attach]47076[/attach]

[attach]47077[/attach]



作者: tmtony    时间: 2011-10-25 00:04
坐个沙发!
作者: zhuyiwen    时间: 2011-10-25 00:59
很详细!
作者: asklove    时间: 2011-10-25 07:57
学习了
作者: 静箬幽兰    时间: 2011-10-25 10:33
简单明了,尤其是有图例~谢谢
作者: roych    时间: 2011-10-25 19:24
猫哥写得很好。曾测试过用Format([日期],"M月")来做列标题时,In函数对此似乎无效。最后,俺只好把10月和11月拖到倒数第三和第二的位置,才算解决了问题。不知道用DatePart函数加上连接符会不会好些。
作者: aslxt    时间: 2011-10-25 21:22
学习学习
作者: SWALLOW2888    时间: 2011-10-26 12:27
多谢照顾新手

作者: aslxt    时间: 2011-10-26 15:37
学习猫哥的,敬佩猫哥的!

作者: vk602    时间: 2012-2-2 22:53
雪中送炭啊,希望能看到多一点这样的例子给初学者。顶个!
作者: YXH_YXH    时间: 2018-4-12 07:23
谢谢分享!!!




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