Office中国论坛/Access中国论坛

标题: 用选择查询还是交叉查询都不成功,求帮助! [打印本页]

作者: 紫风    时间: 2011-6-27 10:53
标题: 用选择查询还是交叉查询都不成功,求帮助!
本帖最后由 紫风 于 2011-6-27 14:54 编辑

1,数据经窗体录入后保存到“tbl卸货派工”的记录如下:
   
日期
入库ID
客户名称
入库车牌
实到数
分货
主班
副班
2010年4月30日
25327
A
粤BS2182
252
TRUE
1班
3班
2011年1月15日
43528
B
粤BWL088
25
TRUE
1班
 
2011年6月21日
51277
C
赣F53207
326
FALSE
1班
 
2011年6月21日
51553
D
粤KJ2190
360
FALSE
1班
 


2,问题:想做一个查询,需要做出来的结果如下表:
班级
日期
卸车数
卸货箱数
分货次数
分货箱数
1班
2010-4-30
0.5
126
0.5
126
3班
2010-4-30
0.5
126
0.5
126
1班
2011-1-15
1
25
0
0
1班
2011-6-21
2
686
0
0


我试过用选择查询和交叉表查询,都做不出来,附件是上传的mdb, 请各位帮忙想一下,谢谢!

这个查询我想用来作为某报表的源,报表想做成如下:

1班
日期,卸车数,卸货件数,分货次数,分货件数

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

3班
日期,卸车数,卸货件数,分货次数,分货件数


作者: todaynew    时间: 2011-6-27 14:58
没什么规律,自己手工分一下好了。
作者: 紫风    时间: 2011-6-27 15:01
todaynew 发表于 2011-6-27 14:58
没什么规律,自己手工分一下好了。

回版主:是没有规律的。
我的问题是:如果主班和副班都有人作业,如何将前面的数据平均分成2份呢?
作者: todaynew    时间: 2011-6-27 15:16
紫风 发表于 2011-6-27 15:01
回版主:是没有规律的。
我的问题是:如果主班和副班都有人作业,如何将前面的数据平均分成2份呢?

这个好办。
SELECT 卸车ID,日期,入库ID,客户名称,入库车牌, IIf(nz([副班],"")="",tbl卸货派工.实到数,tbl卸货派工.实到数/2) AS 实到数, 分货, 主班 as 作业班
FROM tbl卸货派工
UNION ALL SELECT 卸车ID,日期,入库ID,客户名称,入库车牌, IIf(nz([副班],"")="",tbl卸货派工.实到数,tbl卸货派工.实到数/2) AS 实到数, 分货, 副班 as 作业班
FROM tbl卸货派工
Where nz([副班],"")<>"";
作者: 紫风    时间: 2011-6-27 16:28
本帖最后由 紫风 于 2011-6-27 16:33 编辑
todaynew 发表于 2011-6-27 15:16
这个好办。
SELECT 卸车ID,日期,入库ID,客户名称,入库车牌, IIf(nz([副班],"")="",tbl卸货派工.实到数,t ...


谢谢版主!

但是,卸车数的0.5该用什么解决呢?我想通过卸车ID的计数来实现……还是一样,如果主班和副班都有作业,则主班、副班的卸车数各给0.5。其实卸车ID不用显示内容,只要做计数就好……

分货(原来属性为 T/F)能不能做成正数?

还有一个问题,这样的联合查询我如果再从第二个表里选择数据,可以么?
比方说另一个表是tbl装货派工,如果我想在这个联合查询里加里面的装货数量,是不是在两条语句里都加上 tbl装货派工.装货数量?

作者: todaynew    时间: 2011-6-27 17:26
紫风 发表于 2011-6-27 16:28
谢谢版主!

但是,卸车数的0.5该用什么解决呢?我想通过卸车ID的计数来实现……还是一样,如果主班和 ...

1、0.5是个什么玩意不太懂,如果有额定装载量,那么就用实到数量/额定装载量就行了。

2、分货字段就是个分类而已,用什么方式无所谓。实在要转换就用iif函数转换好了。

3、联合查询你想去什么数据都可以,只要合理就行,数据源可以是一个表反复取几次,也可以是不同表取数后组合。

所有的这一切,都可以尝试着进行,这样就能很快搞明白了。
作者: 紫风    时间: 2011-6-27 17:35
todaynew 发表于 2011-6-27 17:26
1、0.5是个什么玩意不太懂,如果有额定装载量,那么就用实到数量/额定装载量就行了。

2、分货字段就是 ...

版主:
1. 卸车数0.5是指: 如果卸车数=1,作业班有2个,则每个作业班的工作量为0.5车。
2. 我尝试过用IIF,但是会将我所有的查询结果都转换成0.5。(卸车数: IIF([入库ID]>0, 0.5, 0))
3. 联合查询我想从2个表里取数据,但是SELECT...FROM后面能跟2个表名么?
作者: todaynew    时间: 2011-6-27 17:42
紫风 发表于 2011-6-27 17:35
版主:
1. 卸车数0.5是指: 如果卸车数=1,作业班有2个,则每个作业班的工作量为0.5车。
2. 我尝试过用II ...

不太明白你的想法,你自己尝试着做吧。呵呵
作者: aslxt    时间: 2011-6-27 23:31
紫风 发表于 2011-6-27 17:35
版主:
1. 卸车数0.5是指: 如果卸车数=1,作业班有2个,则每个作业班的工作量为0.5车。
2. 我尝试过用II ...

[attach]45958[/attach]
如附件的查询,应该可以满足你的要求。
注:你的文字要求和要求的结果表有冲突,这是以文字描述为准的

作者: aslxt    时间: 2011-6-27 23:40
如果不明白,也可以用四步查询的方法:
1、新建查询:
SELECT tbl卸货派工.主班 AS 班级, tbl卸货派工.日期, IIf(Len(Trim(nz([副班],"")))=0,1,0.5) AS 卸车数, IIf(Len(Trim(nz([副班],"")))=0,[实到数],[实到数]/2) AS 卸货箱数, IIf([分货]=True,IIf(Len(Trim(nz([副班],"")))=0,1,0.5),0) AS 分货次数, IIf([分货]=True,IIf(Len(Trim(nz([副班],"")))=0,[实到数],[实到数]/2),0) AS 分货箱数, tbl卸货派工.卸车ID
FROM tbl卸货派工
保存为“查询1”
2、新建查询:
SELECT tbl卸货派工.副班 AS 班级, tbl卸货派工.日期, IIf(Len(Trim(nz([主班],"")))=0,1,0.5) AS 卸车数, IIf(Len(Trim(nz([主班],"")))=0,[实到数],[实到数]/2) AS 卸货箱数, IIf([分货]=True,IIf(Len(Trim(nz([主班],"")))=0,1,0.5),0) AS 分货次数, IIf([分货]=True,IIf(Len(Trim(nz([主班],"")))=0,[实到数],[实到数]/2),0) AS 分货箱数, tbl卸货派工.卸车ID
FROM tbl卸货派工
WHERE (((Len(Trim(nz([副班],""))))<>0))
保存为“查询2”
3、新建查询:
SELECT * FROM 查询1 UNION SELECT * FROM 查询2
保存为“查询3”
4、新建查询:
SELECT 查询3.班级, 查询3.日期, Sum(查询3.卸车数) AS 卸车数之总计, Sum(查询3.卸货箱数) AS 卸货箱数之总计, Sum(查询3.分货次数) AS 分货次数之总计, Sum(查询3.分货箱数) AS 分货箱数之总计
FROM 查询3
GROUP BY 查询3.班级, 查询3.日期
ORDER BY 查询3.日期;
保存为“查询4”
运行“查询4”,OK!

作者: roych    时间: 2011-6-28 20:41
大体看了下,建议用ADO做。手头这台电脑没装Access,暂时只说下思路:
1、把有副班的单独拎出来,按一定的分发方式用ADO写入一个表。
2、把没有副班的拎出来用汇总方式追加到第一步里的那个表。
大体是应该可以实现的。
作者: koutx    时间: 2011-6-28 22:04
本帖最后由 koutx 于 2011-6-28 22:06 编辑

当时作的时候,你一楼的样例还未上传,故当时草草作了个表,你自己改一下就好了。
[attach]45964[/attach]





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3