设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[表] 求助{完整性连接问题}

[复制链接]
跳转到指定楼层
1#
发表于 2009-2-11 11:35:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SELECT *
FROM [SELECT a.工号, main_ygxx.姓名, main_ksdm.科室名称, sum(iif(所扣项目='劳动纪律与职业道德',所扣分数,null)) AS 劳动纪律与职业道德
FROM songwei_1nianziliao AS a, main_ygxx, main_ksdm
WHERE a.工号=main_ygxx.工号 and main_ksdm.科室代码=main_ygxx.科室代码
GROUP BY a.工号, main_ygxx.姓名, main_ksdm.科室名称]. AS f
LEFT JOIN
[SELECT  a.工号, main_ygxx.姓名, main_ksdm.科室名称,sum(iif(所扣项目='劳动纪律与职业道德',所扣分数,null)) AS 劳动纪律与职业道德
FROM songwei_2nianziliao AS a, main_ygxx, main_ksdm
WHERE a.工号=main_ygxx.工号 and main_ksdm.科室代码=main_ygxx.科室代码
GROUP BY a.工号, main_ygxx.姓名, main_ksdm.科室名称]. AS b ON f.工号=b.工号;

怎么换成完整性连接??
我的表是
工号 所扣项目                       所扣分数
00    劳动纪律与职业道德1          55

工号 所扣项目                       所扣分数
00    劳动纪律与职业道德2         55
要转化成
工号  劳动纪律与职业道德1  劳动纪律与职业道德2
00     55                             00
必须用完整性连接
不确定2张表中其中工号信息是否都存在

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-2-11 15:46:46 | 只看该作者
如果你不能确定哪张表的工号信息更全面,建议采用先做联合查询,再做交查表查询。
联合a如:
SELECT songwei_1nianziliao.工号, songwei_1nianziliao.所扣项目, songwei_1nianziliao.所扣分数
FROM songwei_1nianziliao union SELECT songwei_2nianziliao.工号, songwei_2nianziliao.所扣项目 & "2", songwei_2nianziliao.所扣分数
FROM songwei_2nianziliao;

交叉表查询:
TRANSFORM Sum(a.所扣分数) AS 所扣分数之总计
SELECT a.工号, main_ygxx.姓名, main_ksdm.科室名称
FROM (a INNER JOIN main_ygxx ON a.工号 = main_ygxx.工号) INNER JOIN main_ksdm ON main_ygxx.科室代码 = main_ksdm.科室代码
WHERE (((a.所扣项目) Like "*" & "职业" & "*"))
GROUP BY a.工号, main_ygxx.姓名, main_ksdm.科室名称
PIVOT a.所扣项目;


==>
TRANSFORM Sum(a.所扣分数) AS 所扣分数之总计
SELECT a.工号, main_ygxx.姓名, main_ksdm.科室名称
FROM (((SELECT songwei_1nianziliao.工号, songwei_1nianziliao.所扣项目, songwei_1nianziliao.所扣分数
FROM songwei_1nianziliao UNION SELECT songwei_2nianziliao.工号, songwei_2nianziliao.所扣项目 & "2", songwei_2nianziliao.所扣分数
FROM songwei_2nianziliao) as a)
INNER JOIN main_ygxx ON a.工号=main_ygxx.工号) INNER JOIN main_ksdm ON main_ygxx.科室代码=main_ksdm.科室代码
WHERE (((a.所扣项目) Like "*" & "职业" & "*"))
GROUP BY a.工号, main_ygxx.姓名, main_ksdm.科室名称
PIVOT a.所扣项目;
3#
 楼主| 发表于 2009-2-11 16:31:03 | 只看该作者
本帖最后由 lingdud 于 2009-2-11 17:06 编辑

谢谢版主指教!
我要的是一年资料和第2年资料分开显示``应为报表要打印成
工号  劳动1年  劳动2年
002   11        11
所以要每条都有2种记录
如果你下了附件 就参照 songwei_5nian
要把表写成那样``
以上SQL只能把2年的合成一张表`
只显示
工号 劳动1-2年资料
002  11
所以不用完整性连接很麻烦``
4#
发表于 2009-2-12 12:52:09 | 只看该作者
第一年和第二年是会分开显示的,估计你因为第二年没产生资料,所以会看不到第二年字段。

说明一下:1.如没有特殊需求,好象并不需要使用生成表查询,而直接使用选择查询,不用生成表。
2.你生成表所选用的条件是扣分时间,而你的测试数据扣分时间等是有重复而不是有好几年的数据。
3.由于交叉表查询产生的字段标题是作为列标题的原字段的值,而该值在查询中也是可以更改的,如我把第二年的所扣项目显示为:songwei_2nianziliao.所扣项目 & "2",你当然也可显示为其他名称 如:left(songwei_2nianziliao.所扣项目,2) & "2年"
5#
 楼主| 发表于 2009-2-12 19:05:57 | 只看该作者
本帖最后由 lingdud 于 2009-2-13 17:25 编辑

谢谢版主!
        
应为年份的资料要调出来打印
我也想写简单点 不过老是出现子查询只能返回一个记录
无赖之下只好先创建表再查询
还望高手指点!
6#
发表于 2009-2-14 10:56:13 | 只看该作者
呵呵
7#
 楼主| 发表于 2009-2-16 09:01:11 | 只看该作者
我以前是学sql server的 现在刚换ACCSEE 很多代码都不一样搞的我头都大了 见笑了```
经过研究还是写出来了 多谢各位了有问题再请教
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-28 07:00 , Processed in 0.097821 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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