zifan620 发表于 2007-10-23 19:44

office access的问题,急

access中有两个表,其中一个包含所有人姓名\学号,另外一个包含部分人的学号,把这一部分人的姓名从另一个表对应出来,怎么办?

powerwind 发表于 2007-10-23 19:58

你说的“对应出来”是指建立对应关系还是要把表的东西拿出来?

最好把两个表的结构告诉一下

zifan620 发表于 2007-10-23 20:56

表一

学号 姓名
001  张三
002  李四
003  黄五
004  林六

表二

学号 姓名
002  
003  

想把表2通过表一实现姓名,得出如下结果

表二

学号 姓名
002  李四
003  黄五


两个表在同一个数据库文件里,*.mdb那种

南网情深 发表于 2007-10-23 22:17

最简单好像是利用access查询视图的功能
这样还可以生成相应的sql代码

直接代码写好像是
select   表1.学号,表1.姓名
from表1 inner join表2on表1.学号=表2.学号
对么

[ 本帖最后由 南网情深 于 2007-10-23 22:23 编辑 ]

powerwind 发表于 2007-10-23 22:19

好像access不支持子查询的,不知道怎么实现。

如果只是一个一个地从表1添到表2就可以用追加查询实现

只能帮顶了

南网情深 发表于 2007-10-23 22:24

access支持多表联合查询的,做过一次

[ 本帖最后由 南网情深 于 2007-10-23 22:26 编辑 ]

powerwind 发表于 2007-10-23 22:29

刚刚试试了下,发现一个方法勉强可以。使用生成表查询

sql视图下看到:

SELECT 表1.学号, 表1.姓名 INTO 表3
FROM 表1 INNER JOIN 表2 ON 表1.学号 = 表2.学号
WHERE (((表1.学号)=[表2].[学号]));

查询视图设计界面

南网情深 发表于 2007-10-23 22:41

搭台问问
表1

编号|    类型       |    使用人|   部门
1      |台式电脑 |   甲      |   a
2      |台式电脑 |   乙      |   b
3      |台式电脑 |   丙      |   c



表2

编号 |    类型      |    使用人|   部门
1      |笔记本   |   乙         |   b
2      |笔记本   |   丁         |   d



我要达到下面目的:


部门   |    类型      |    使用人
a          |    台式机   |    甲
b          |    台式机   |    乙
b          |    笔记本   |    乙
c          |    台式机   |    丙
d          |    笔记本   |    丁


主要为了我后面可以分组group by 部门
看每个部门每种设备多少台
然后count(台式机) count(笔记本)多少台


前面那个表怎么查询出来呢
或者还有其他方法吗
只要能分部门查出不同设备的数目就行了

[ 本帖最后由 南网情深 于 2007-10-23 22:53 编辑 ]

powerwind 发表于 2007-10-23 23:32

原帖由 南网情深 于 2007-10-23 22:41 发表 https://www.gdutbbs.com/images/common/back.gif
搭台问问
表1

编号|    类型       |    使用人|   部门
1      |台式电脑 |   甲      |   a
2      |台式电脑 |   乙      |   b
3      |台式电脑 |   丙      |   c
...

select count(xx.类型) as cfrom (select * from 表1 union select * from表2) as xx group by xx.部门;

南网情深 发表于 2007-10-24 01:00

晕,发现一个问题 union要求联合查询的两表列数要相同
我实际表的列数不相同的

南网情深 发表于 2007-10-24 01:01

改join看看

南网情深 发表于 2007-10-24 11:35

再请教一下,我实际情形大概是这样的
我有两个表

一个是记载台式机参数的,如cpu,内存,所属部门,使用人等等
另一个表是记载笔记本的,也是笔记本的一些参数,大概和上表差不多的参数,不过列没上表多,例如台式机有显示器字段,笔记本没显示器字段

粗略为下面所示
台式机表名:shebei_ts
tsid    |   sb_bumen    |    sb_ren|   ts_neicun   |   ts_zhupin   |   ts_xianshi|
1
2
3
4
5
6
.......
这里行数是最多的,也就是台式机人手一台

笔记本表名:shebei_nb
nbid    |   sb_bumen    |    sb_ren|   ts_neicun   |   ts_zhupin   |
1
2
...


笔记本的列少,行也少
也就是笔记本不是人手一台,只是部分人有

我用下面sql语句查询,基本上满足条件:以部门分组,计算每个部门每种设备的数量

select shebei_ts.sb_bumen,count(shebei_ts.sb_leixing),count(shebei_nb.sb_leixing)
from shebei_ts left join shebei_nb on shebei_ts.sb_ren=shebei_nb.sb_ren
group by shebei_ts.sb_bumen


但是有个问题,按照这样的方法,一人一电脑还可以,但是出现一人多部电脑时间,笔记本的计数就会不正确

查询的表大概是这样:

shbei_ts.bumen   |shebei_ts.ren|shebei_ts.leixing|   shebei_nb.leixing
部门a                     |      人a               |          台式机      |         笔记本
部门a                     |      人a               |          台式机      |         笔记本


实际上,人a只有一个笔记本,两台主机
但是因为left join on表1.ren=表2.ren
所以有这个问题出现

请问有什么思路或者方法可以避免这样的误算呢
新手,麻烦指导一下

[ 本帖最后由 南网情深 于 2007-10-24 14:17 编辑 ]

powerwind 发表于 2007-10-24 19:32

最简单方法,为笔记本表增加表示显示器的字段,反正台式与笔记本的差别也只在这点而已,^_^

如果现在才开始设计表,可以考虑把两个表设计成一个表,增加类型type字段区分台式与笔记本

按目前情况,试试生成临时表以达到目的

南网情深 发表于 2007-10-24 20:16

问题是我还要嵌套其他几个表,如打印机、复印机、传真机
他们的表结构和台式机笔记本完全不同的
表已经设计好了
这次是二次扩展
所以暂时想不动原来的表,或者小动作动

powerwind 发表于 2007-10-24 21:32

原帖由 南网情深 于 2007-10-24 01:00 发表 https://www.gdutbbs.com/images/common/back.gif
晕,发现一个问题 union要求联合查询的两表列数要相同
我实际表的列数不相同的


并不是完全如此

你可以选择相同字段进行union

如:

select ts.sb_bumen from shebei_ts as ts union select nb.sb_bumen from shebei_nb as nb

2002070344 发表于 2007-10-25 00:53

嗯,谢谢,基本实现要求了


select ts.sb_bumen,ts.sb_leixing from shebei_ts as ts union all select nb.sb_bumen,nb.sb_leixing from shebei_nb as nb
order by ts.sb_bumen

南网情深 发表于 2007-10-25 01:51

可以了
5个表连接,眼花缭乱SELECT *
FROM . AS tndfc
ORDER BY tndfc.sb_bumen, tndfc.sb_leixing;

[ 本帖最后由 南网情深 于 2007-10-25 01:55 编辑 ]

南网情深 发表于 2007-10-25 02:09

不过,还是有点不对劲
我的目的是想这样

sql查询语句;
<%do while not rs.eof%>      //下面是一个表格
|---------------------------------------------|---------------------------------------------|
|                                                         |台式机台数:<%=rs(count(.....))%>
|部门:                                                 |----------------------------------------------|
|<%=rs("tndfc.bumen")%>                  |笔记本台数:<%=rs(count(.....))%>
|                                                          |---------------------------------------------|
|                                                          ..............................................................
|                                                         ............................................................
|------------------------------------------------|---------------------------------------------|
<% rs.movenext
loop
rs.close
set rs=nothing
%>


如果在17F查询出来的table的基础上搞
那么我不是要搞很多个where tndfc.sb_leixing="台式机"
where tndfc.sb_leixing="笔记本".......................
那样就不能完成我rs.movenext自动生成上面的形式?


我能不能在一个语句里面写完所有查询
例如这样:
select sb_bumen,count(sb_bumen="台式机"),count(sb_bumen="笔记本"),count(sb_bumen="打印机"),count(sb_bumen="传真机"),count(sb_bumen="复印机" )
from tndfc


,不知道有没人明白我说什么,我也不知道是不是说得稀里糊涂的,明早再试试

[ 本帖最后由 南网情深 于 2007-10-25 02:22 编辑 ]

南网情深 发表于 2007-10-26 00:37

按照ppt的思路,我五个表每张表都建了一个冗余的字段来相互对应,基本上实现了目的 SELECT *
FROM . AS tndfc
ORDER BY tndfc.sb_bumen;

[ 本帖最后由 南网情深 于 2007-10-26 00:42 编辑 ]

powerwind 发表于 2007-10-26 00:51

SELECT * FROM [select * from (select * from (select * from (select ............
层层select,o(∩_∩)o...

恭喜!!
页: [1]
查看完整版本: office access的问题,急