office access的问题,急
access中有两个表,其中一个包含所有人姓名\学号,另外一个包含部分人的学号,把这一部分人的姓名从另一个表对应出来,怎么办? 你说的“对应出来”是指建立对应关系还是要把表的东西拿出来?最好把两个表的结构告诉一下 表一
学号 姓名
001 张三
002 李四
003 黄五
004 林六
表二
学号 姓名
002
003
想把表2通过表一实现姓名,得出如下结果
表二
学号 姓名
002 李四
003 黄五
两个表在同一个数据库文件里,*.mdb那种 最简单好像是利用access查询视图的功能
这样还可以生成相应的sql代码
直接代码写好像是
select 表1.学号,表1.姓名
from表1 inner join表2on表1.学号=表2.学号
对么
[ 本帖最后由 南网情深 于 2007-10-23 22:23 编辑 ] 好像access不支持子查询的,不知道怎么实现。
如果只是一个一个地从表1添到表2就可以用追加查询实现
只能帮顶了 access支持多表联合查询的,做过一次
[ 本帖最后由 南网情深 于 2007-10-23 22:26 编辑 ] 刚刚试试了下,发现一个方法勉强可以。使用生成表查询
sql视图下看到:
SELECT 表1.学号, 表1.姓名 INTO 表3
FROM 表1 INNER JOIN 表2 ON 表1.学号 = 表2.学号
WHERE (((表1.学号)=[表2].[学号]));
查询视图设计界面 搭台问问
表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 编辑 ] 原帖由 南网情深 于 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.部门; 晕,发现一个问题 union要求联合查询的两表列数要相同
我实际表的列数不相同的 改join看看 再请教一下,我实际情形大概是这样的
我有两个表
一个是记载台式机参数的,如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 编辑 ] 最简单方法,为笔记本表增加表示显示器的字段,反正台式与笔记本的差别也只在这点而已,^_^
如果现在才开始设计表,可以考虑把两个表设计成一个表,增加类型type字段区分台式与笔记本
按目前情况,试试生成临时表以达到目的 问题是我还要嵌套其他几个表,如打印机、复印机、传真机
他们的表结构和台式机笔记本完全不同的
表已经设计好了
这次是二次扩展
所以暂时想不动原来的表,或者小动作动 原帖由 南网情深 于 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 嗯,谢谢,基本实现要求了
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 可以了
5个表连接,眼花缭乱SELECT *
FROM . AS tndfc
ORDER BY tndfc.sb_bumen, tndfc.sb_leixing;
[ 本帖最后由 南网情深 于 2007-10-25 01:55 编辑 ] 不过,还是有点不对劲
我的目的是想这样
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 编辑 ] 按照ppt的思路,我五个表每张表都建了一个冗余的字段来相互对应,基本上实现了目的 SELECT *
FROM . AS tndfc
ORDER BY tndfc.sb_bumen;
[ 本帖最后由 南网情深 于 2007-10-26 00:42 编辑 ] SELECT * FROM [select * from (select * from (select * from (select ............
层层select,o(∩_∩)o...
恭喜!!
页:
[1]