Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • Access使用查询
  • 如何提取分组取前N条的记录
  • 如何取消操作查询的提示
  • Access查询中直接使用..
  • 【查询答疑】浅谈那些被重复..
  • SQL语句中NOT操作符的..

最新文章

  • 【查询答疑】浅谈那些被重复..
  • SQL语句中NOT操作符的..
  • Access查询中直接使用..
  • Access常用sql基本..
  • 如何取消操作查询的提示
  • 条件选择列求和

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 查询 > 选择查询
选择查询

【查询答疑】浅谈那些被重复计算的数据

我们先来看一个问题:
access数据库 QQ截图20170520172455.jpg
在查询请假扣款时,工号2和3明明是分别扣100,到了工资计算时,怎么就分别扣了200和300了呢?

为了查清楚问题的真相,我们先分解下。首先看看请假扣款查询是否存在问题:
access数据库

6.png (15.03 KB, 下载次数: 0)

下载附件  保存到相册

3

昨天 10:33 上传


查看设计视图,用表达式来求和,显然是OK的。既然问题不在这里,那么我们继续下一步,查看工资查询的问题:
access数据库

3.png (42.64 KB, 下载次数: 0)

下载附件  保存到相册

2

昨天 10:27 上传


显然,主表除了联接请假表之外,还直接联接了2个表。一个是底薪表,另一个则是计件工资部分。我们继续拆解,看看底薪表有没有问题:
access数据库

8.png (13.81 KB, 下载次数: 0)

下载附件  保存到相册

4

昨天 10:37 上传


表面上看,底薪表跟人事表的底薪类别存在一对多的关系,但是考虑到每个员工只有一个底薪类别,所以可以视为一对一的关系。也就是说,因此这个表的重复计算也可以排除了。
剩下的就两个表了:加班表和工序工费表。我们来看看这两个表到底是什么情况:
access数据库

44.png (17.8 KB, 下载次数: 0)

下载附件  保存到相册

5

昨天 10:46 上传


这个工号1的计件工资是110元。这个显然是没问题的。细心的你,肯定发现问题在哪里了。不错,我们回头看看前面那个表:
access数据库

77.png (19.43 KB, 下载次数: 0)

下载附件  保存到相册

6

昨天 10:46 上传


工号1的计件工资怎么变成220元了?这显然是在这两个表的联接过程中存在重复计算的问题了。
为什么会这样呢?我们知道,计件工资里只有一条记录……显然问题不在计件工资里,那么在哪里呢?而且又不在底薪表里(前面我们分析过了),所以,我们可以很肯定地说,问题出现在请假表里,我们回头再看看:
access数据库

99.png (17.12 KB, 下载次数: 0)

下载附件  保存到相册

7

昨天 10:53 上传


果然,工号1请假了2天……这就很好解释了。由于请假2天,所以计件工资也给他计算了2次。
现在,我们可以来讨论下解决方案了:
请假表或者加班表,至少选择一个作为合计查询,以便得到唯一值,否则就会产生笛卡尔乘积:简单点说,就是:A表有n条记录,B表有m条记录,会产生n×m条结果。这里就不再赘述这个查询怎么做了。详细见附件。

最后,给新手一点建议:
1、建议所有新手都看看本文。如果没空看完全文,请看第2点。
2、多个表做联接查询时,如果含有聚合函数(sum、count等等)时,尽可能保证主表与子表的关系是一对一关系。如果不能全部做到,最多只保留一个一对多关系。本例就是只保留一个一对多关系(详细请留意查询:工资汇总和工资汇总2)


发布人:achao  
分享到:
点击次数:  更新时间:2017-05-20 17:16:06  【打印此页】  【关闭】
上一条:一种比GetTickCount 和Timer更精确的计时器  下一条:VB用PrevInstance和DDE实现禁止多个实例同时打开并传递命令



相关文章

  • • SQL语句中NOT操作符的使用
  • • Access查询中直接使用查阅实现组合框
  • • Access常用sql基本查询语句汇总
  • • 如何取消操作查询的提示
  • • 条件选择列求和
  • • Access使用查询
  • • 随机得到Access数据库记录

热门文章

  • [2005-02-06] 如何提取分组取前N条的记录access数据库
  • [2009-10-15] 条件选择列求和access数据库
  • [2005-07-10] 用Between 和 iif 实现灵活的查询access数据库
  • [2009-08-25] 随机得到Access数据库记录access数据库
  • [2017-05-20] 【查询答疑】浅谈那些被重复计算的数据access数据库
  • [2009-11-26] 如何取消操作查询的提示access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

Access交流网 版权所有 1999-2018 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2023  www.metinfo.cn