| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 491 人关注过本帖
标题:这样的查询语句请问怎么写?
只看楼主 加入收藏
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
结帖率:70.37%
收藏
 问题点数:0 回复次数:3 
这样的查询语句请问怎么写?
有两个数据表,A表是记录生产排程表,B表是记录实际生产记录表.
A表                                                                        B表
工单号    产品编码     日期         计划数量      计划工时                工单号      产品编码      日期         实际数量      实际工时
GD002        A         2011-05-28     300            40                    GD002       A            2011-05-28     110         10
GD003        B         2011-05-28     800            20                    GD004       C            2011-05-28     700         22
                                                                           GD002       A            2011-05-28     200         35
现在要做一个查询,结果如下:
工单号    产品编码      日期         计划数量     计划工时      实际数量       实际工时
GD002        A          2011-05-28   300             40         310            45   (按排程生产)
GD003        B          2011-05-28   800             20         0              0    (有排程没生产)
GD004        C          2011-05-28   0               0          700            22   (没排程有生产)

请问要得到以上结果,应该怎样写SQL语句???

[ 本帖最后由 davyxjc 于 2011-5-28 09:31 编辑 ]
搜索更多相关主题的帖子: 数据表 记录表 
2011-05-28 09:29
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
我认为你提供的数据有问题,根据你的表述,应该一个是计划表A,一个是实际生产表B,根据实际情况,如果没有计划生产应该不会出现实际生产的,但你提供的计划表中没有C的生产计划,却在实际生产表中生产了C,这没道理,有计划没生产可以理解,比如B,因此,可使用左联合的方式写SQL语句,但统计的结果不会出现C的结果,SQL语句为:
SELECT DISTINCTROW A.工单号, A.产品编码, A.日期, A.计划数量, A.计划工时, Sum(B.实际数量) AS [Sum 之 实际数量], Sum(B.实际工时) AS [Sum 之 实际工时]
FROM A LEFT JOIN B ON A.工单号 = B.工单号
GROUP BY A.工单号, A.产品编码, A.日期, A.计划数量, A.计划工时;
查询结果为:
GD002        A          2011-05-28   300             40         310            45   
GD003        B          2011-05-28   800             20                             
也可以使用子查询的方式,SQL语句为:
SELECT 工单号, 产品编码, 日期, 计划数量, 计划工时, (select sum(实际数量) from b where 工单号=a.工单号 and 日期=a.日期) AS 实际数量, (select sum(实际工时) from b where 工单号=a.工单号 and 日期=a.日期) AS 实际工时
FROM a;
查询结果同上。
如果你非要显示所有记录统计,也就是左右联合的记录,你必须建立一张工单号的表c,里面全面记录所有的工单号,以它为基础左联合,即c-a-b,这样就可以统计完全。
该两条SQL语句均在Access中执行通过

[ 本帖最后由 lowxiong 于 2011-5-28 10:49 编辑 ]
2011-05-28 10:44
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
收藏
得分:0 
谢谢楼上,各个公司不一样,我们公司的生产不一定按排程表生产,有时候考滤到材料,插单等各种特殊原因,生产可能自己调整生产订单.所以才要统计出排产的生产了多少?生产了多少没有排产的订单?
2011-05-28 11:38
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
回复 3楼 davyxjc
哦,那你就还要设计一张C表,里面只要“工号单”和“产品编号”两项,然后一次性将你公司所有的工号单和产品编号记录进行输入,以后就以这个C表为基础,联合A表和B表设计SQL语句即可。
2011-05-28 12:12
快速回复:这样的查询语句请问怎么写?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017012 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved