设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 关于交叉查询

[复制链接]
跳转到指定楼层
1#
发表于 2002-11-23 17:39:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我应高人指点需要用到交叉查询,可小弟目前手里的参考书太弱智了,没有介绍这方面的知识,哪位仁兄给个例子。我的妹是:guojun.liu@telewave.net.cn
详细的问题见我发表的”关于VB+ACCESS+SQL联合查询的问题“
谢谢了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2002-11-23 19:08:00 | 只看该作者
交叉查询是JET(MDB)所使用的语句

交叉表查询

使用交叉表查询可以计算并重新组织数据的结构,这样可以更加方便地分析数据。交叉表查询计算数据的总计、平均值、计数或其他类型的总和,这种数据可分为两组信息:一类在数据表左侧排列,另一类在数据表的顶端。

使用向导创建交叉表查询

在“数据库”窗口中,单击“对象”下的“查询”  ,然后单击“数据库”窗口工具栏上的“新建”。
在“新建查询”对话框中,单击“交叉表查询向导”,然后单击“确定”。
按照向导对话框中的指导进行操作。在最后一个对话框中,可以选择是执行查询,还是在“设计”视图中查看查询的结构。
如果生成的查询不完全符合要求,可以返回向导或在“设计”视图中更改查询。

自行创建交叉表查询

在“数据库”窗口中,单击“对象”下的“查询”  ,然后单击“数据库”窗口工具栏上的“新建”。
在“新建查询”对话框中,单击“设计视图”,然后单击“确定”。
在“显示表”对话框中,单击列出了所需的表或查询数据的选项卡。
双击要添加到查询的每个对象的名字,然后单击“关闭”。
在设计网格中将字段添加到“字段”行,并指定条件。
在工具栏上,单击“查询类型”  ,然后单击“交叉表查询”。
如果要将字段的值按行显示,请单击“交叉表”行,然后单击“行标题”。
必须在这些字段的“总计”行保留默认的 Group By。

如果要将字段的值显示为列标题,请单击“交叉表”行,然后单击“列标题”。可以只选择一个字段的“列标题”,且必须为这个字段的“总计”行保留默认的 Group By。
默认情况下,列标题按字母或数字顺序排序。如果希望以其他方式排序,或者要限制显示的列标题,请设置查询的“列标题”属性。

操作方法:

可以更改交叉表查询中的顺序或限制列标题。例如,在包含各个月份的列标题中,可以使月份按时间排序,而不是按字母顺序。也可以限制为从一月到六月的列。

在“设计”视图中打开交叉表查询。
在设计网格和字段列表之外,单击查询“设计”视图的背景。
在工具栏上,单击“属性”  ,以显示查询的属性表。
在“列标题”属性框中,按希望的显示顺序输入要显示的列标题。在列标题之间,请键入逗号或适合自己国家/地区(有关国家/地区的列表分隔符的内容,请查看 Windows“控制面板”中的“区域设置”)的分隔符。
输入的列标题必须与查询数据表的列标题完全相符。例如,如果数据表中的列标题是“USA”,则必须输入“USA”作为列标题,而不是“US”(按 Enter 或者将指针移动到其他位置之后,Microsoft Access 会将每个列标题用引号括起来)。

若要查看查询结果,请单击工具栏上的“视图”  。
注意   

如果需要经常运行交叉表查询,或者将它用作窗体、报表或数据访问页的基础查询,用上述过程指定固定的列标题可以加快查询的运行速度。
如果在不同的查询中频繁地使用相同的列标题,考虑创建带有一个文本字段的表以存储列标题。需要时请打开该表并将标题复制到“列标题”框中。
对于要将其值用于交叉表的字段,请单击“交叉表”行,然后单击“值”。
只有一个字段可以设置为“值”。

在这个字段的“总计”行,单击希望用于交叉表的聚合函数类型(例如 Sum、Avg 或 Count)。
请执行下列操作之一:
指定条件,用于在执行计算前限制行标题

针对在“交叉表”单元格中有“行标题”的字段,在“条件”行输入一个表达式。
例如,可能希望显示某种类别的产品(如肉和海鲜)销售总计。

指定条件,用于在对行标题分组之前和执行交叉表之前对记录加以限制

将要为其设置限制条件的字段添加到设计网格。

单击“总计”单元格中的 Where。

保留“交叉表”单元格为空。

在“条件”行输入表达式。

查询结果不会显示“总计”行中有 Where 的那些字段。

若要查看查询结果,请单击工具栏上的“视图” 。

若要在启动查询后中止运行,请按 Ctrl+Break。

注意

“罗斯文”示例数据库中的“各种产品的季度订单”查询,就是一个交叉表查询的示例。若要查看该查询,请打开 Office 文件夹 Samples 子文件夹中的“罗斯文”数据库,然后在“设计”视图中,打开“各种产品的季度订单”。
如果在查询设计网格中包含了某个字段,但又单击了“交叉表”单元格中的“(不显示)”选项和“总计”单元格中的 Group By,则 Microsoft Access 将按照“行标题”对其进行分组,但在查询结果中不显示此行。
“列标题”字段的值可能包含通常不允许在字段名中出现的字符(如小数)。如果遇到这种情况,Access 将在数据表中以下划线取代此字符。

---------------------------------------

以上都是ACCESS帮助的内容,你可以看看
3#
发表于 2002-11-23 20:06:00 | 只看该作者
看到前的几句话,对huanghai总版主充满了敬佩,真是学识渊博啊,讲得头头是道,微软专家想来也不过如此,看到最后一句“以上都是ACCESS帮助的内容”,所有敬意都跑到爪哇国去了。:)
4#
发表于 2002-11-23 20:27:00 | 只看该作者
大熊,你………哈哈哈
5#
 楼主| 发表于 2002-11-23 21:25:00 | 只看该作者
哎呀,咋的了?咋的了?我咋眼冒金星有点晕呢。
好不容易看完了你的帖子,可感觉对我没多大的帮助(赶紧伸舌头),其实我要实现的东东就是把一行的不为0的字段作成一个记录集的一列。您交我的是在ACCESS中怎样作交叉查询,可我想通过SQL语句实现,小弟愚昧,不能举一反三,请再帮下忙。我自己做的东东和问题如下:



关于VB+ACCESS+SQL联合查询的问题
我有一个表有如下的字段:
ncellid \ncell1\ncell2\ncell3\ncell4......ncell25共26个字段,现我想把符合条件的某行(既ncellid为某值的行 )的ncell1\ncell2\ncell3\ncell4......ncell25的字段中不为空的字段作成记录集同一字段的不同行.,名字为cellid.例如我的符合条件的表的行的数据如下:
ncellid ncell1 ncell2 ncell3 ncell4......ncell25
20021 1 2 3 4 25
则查询的结果应为:

cellid ncellid
1` 20021
2 20021
3 20021
4 20021
..............
..............
25 20021

我用的方法如下有点笨,但目前想不出更好的来)
X$ = "select ncell1 as cellid ,ncellid from neighber where ncell1 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell2 ,ncellid from neighber where ncell2 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell3 ,ncellid as nee from neighber where ncell3 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell4 ,ncellid from neighber where ncell4 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell5 ,ncellid from neighber where ncell5 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell6 ,ncellid from neighber where ncell6 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell7 ,ncellid from neighber where ncell7 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell8 ,ncellid from neighber where ncell8 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell9 ,ncellid from neighber where ncell9 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell10 ,ncellid from neighber where ncell10 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell11 ,ncellid from neighber where ncell11 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell12 ,ncellid from neighber where ncell12 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell13 ,ncellid from neighber where ncell13 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell14 ,ncellid from neighber where ncell14 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell15 ,ncellid from neighber where ncell15 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell16 ,ncellid from neighber where ncell16 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell17 ,ncellid from neighber where ncell17 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell18 ,ncellid from neighber where ncell18 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell19 ,ncellid from neighber where ncell19 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell20 ,ncellid from neighber where ncell20 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell21 ,ncellid from neighber where ncell21 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell22 ,ncellid from neighber where ncell22 <> 0 and ncellid = "
X$ = X$ & scellid
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
X$ = X$ & " union select ncell23 ,ncellid from neighber where ncell23 <> 0 and ncellid = "
X$ = X$ & scellid

X$ = X$ & " union select ncell24 ,ncellid from neighber where ncell24 <> 0 and ncellid = "
X$ = X$ & scellid


X$ = X$ & " union select ncell25 ,ncellid from neighber where ncell25 <> 0 and ncellid = "
X$ = X$ & scellid
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Set adjco = db.OpenRecordset(X$, dbOpenSnapshot)

当我去掉$$$之间的语句时程序正常,当加上后提示列别名错误。而我的后几条语句和前面的格式一样呀,是不是UNION查询最多允许22条语句呀?欢迎各位高手指点。如果不用这种方法还有
6#
 楼主| 发表于 2002-11-24 20:21:00 | 只看该作者
斑竹,看在党和国家的份上,救兄弟一把呀!
7#
 楼主| 发表于 2002-11-25 20:58:00 | 只看该作者
给为高手能帮我找找交叉查询的SQL语句怎么写吗,我查了很多东东也找不着,都快急死了呀。
8#
发表于 2002-11-25 22:07:00 | 只看该作者

交叉查询的例子

以下是一个统计个部门男女人数的例子:
TRANSFORM Count(Employees.EmployeeID) AS 人数
SELECT Employees.DepartmentNo, Count(Employees.EmployeeID) AS [总人数]
FROM Employees
GROUP BY Employees.DepartmentNo
PIVOT Employees.Sex;

Employees表每个员工一条纪录。相关字段如下:
EmployeeID: 员工号。Key字段
DepartmentNo: 部门号
Sex: 性别

该查询的结果如下:
DepartmentNo    总人数    F       M
001              15       6       9
002              20       12      8
...
SQL语句中Select后的字段为要在行中显示的字段,这里是DepartmentNo,因为要统计部门的男女人数。PIVOT后的字段是做统计的字段,这里是Sex。而TRANSFORM后的字段是统计的数值,这里是Count(EmployeeID),即相同PIVOT字段(这里是Sex)的员工人数。



[此贴子已经被作者于2002-11-25 14:07:09编辑过]

9#
 楼主| 发表于 2002-11-26 20:13:00 | 只看该作者
谢谢,我回去好好研究一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-25 03:07 , Processed in 0.108275 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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