ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4663|回复: 11

[求助] 两个表的数据如何联合查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-3-22 15:31 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一个计划和生产统计的问题,有时候有计划没生产,同时拿没有计划的产品顶替生产。
我想有计划没生产的显示出来,没计划有生产的也要显示出来,用SQL语句怎么写?
附件: test.rar (6.18 KB, 下载次数: 24)
日期:2013/3/14
结果:
订单号产品名称订单数量计划数量合格品数
HKV130101-00020S211
4650
6720
5770
HKV130092-00043G510C-C
71500
0
3200
HKV130097-00043G510C-B
51500
2720
0

[生产统计表$]
生产日期班次机台号订单号产品名称合格品数
2013/3/14白班2HKV130101-00020S211
1,500
2013/3/14白班12HKV130101-00020S211
1,500
2013/3/14白班3HKV130092-00043G510C-C
3,200
2013/3/14晚班12HKV130101-00020S211
670
2013/3/14晚班2HKV130101-00020S211
2,100
2013/3/15白班4HKV130097-00043G510C-B
3,200
2013/3/15白班22HKV130097-00043G510C-B
1,842
2013/3/15白班22HKV130101-00020S211
500
2013/3/15晚班22HKV130101-00020S211
1,000

[计划表$]
生产日期班次订单号产品名称计划数量订单数量
2013/3/14
白班HKV130101-00020S211
2100
4650
2013/3/14
白班HKV130101-00020S211
2100
4650
2013/3/14
晚班HKV130101-00020S211
2100
4650
2013/3/14
晚班HKV130101-00020S211
420
4650
2013/3/14
白班HKV130097-00043G510C-B
2720
51500
2013/3/15
白班HKV130101-00020S211
2100
4650
2013/3/15
晚班HKV130101-00020S211
2100
4650
2013/3/15
白班HKV130097-00043G510C-B
3400
51500
2013/3/15
白班HKV130097-00043G510C-B
1700
51500

TA的精华主题

TA的得分主题

发表于 2013-3-22 16:40 | 显示全部楼层
SELECT a.订单号, a.产品名称, a.订单数量, sum(a.计划数量) as 计划数量, sum(b.合格品数) as 合计数量 FROM 计划表 a LEFT OUTER JOIN 生产统计表 b on a.订单号 = b.订单号 and a.产品名称 = b.产品名称 where (a.生产日期 = '2013/3/14') or (b.生产日期 = '2013/3/14') GROUP BY a.订单号, a.产品名称, a.订单数量

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-22 19:32 | 显示全部楼层
本帖最后由 xhqxiao 于 2013-3-22 19:35 编辑
gzmcw65 发表于 2013-3-22 16:40
SELECT a.订单号, a.产品名称, a.订单数量, sum(a.计划数量) as 计划数量, sum(b.合格品数) as 合计数量 FR ...

非常感谢你的帮助,还有点问题,现语句查询出来的结果如下表。
订单号产品名称订单数量计划数量合计数量
HKV130101-00020S21146505712040620
HKV130097-00043G510C-B5150054405042

TA的精华主题

TA的得分主题

发表于 2013-3-22 20:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2013-3-22 20:37 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-22 21:10 | 显示全部楼层
amazeyeli 发表于 2013-3-22 20:37
貌似 left 反了

应该是 生产表 left join 计划表 吧

我想有计划没生产的显示出来,没计划有生产的也要显示出来,我试过只用LEFT JOIN 好像不行,你能帮我把语句也出来吗?

TA的精华主题

TA的得分主题

发表于 2013-3-22 21:23 | 显示全部楼层
left + right = full

seleft * from tb1 a
left join tb2 b
on a.id=b.id
union all
select * from tb1 a
right join tb2 b
on a.id=b.id

TA的精华主题

TA的得分主题

发表于 2013-3-22 21:23 | 显示全部楼层
用union去重好了
seleft * from tb1 a
left join tb2 b
on a.id=b.id
union
select * from tb1 a
right join tb2 b
on a.id=b.id

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-3-22 22:08 | 显示全部楼层
amazeyeli 发表于 2013-3-22 21:23
用union去重好了
seleft * from tb1 a
left join tb2 b

我自己也想了个办法,如下:
SELECT 订单号,产品名称,订单数量,SUM(计划数量) AS 计划数量,SUM(合格品数) AS 合格品数 FROM
(SELECT 订单号,产品名称,计划数量,订单数量,0 AS 合格品数  FROM [计划表$] AS V WHERE V.生产日期=#2013/3/14# UNION ALL
SELECT 订单号,产品名称,0 AS 计划数量,0 AS 订单数量,合格品数 FROM [生产统计表$] AS U WHERE U.生产日期=#2013/3/14#)
GROUP BY 订单号,产品名称,订单数量

TA的精华主题

TA的得分主题

发表于 2013-3-23 13:19 | 显示全部楼层
说明:1.计划表 →jihua   ; 生产统计表→shengchan
         2.没有发现你的原始表中有产品043G510C-C  的订单数量,所以统计结果为0
-------------------------------------------------------------------------------------------------------------------
select a.订单号,a.产品名称,a.订单数量,a.计划数量,isnull(b.合格品数,0)as 合格品数 from
(select jh.订单号,jh.产品名称,SUM(jh.订单数量)as 订单数量,SUM(jh.计划数量) as 计划数量
from ceshi..jihua jh
where CONVERT(varchar(20),jh.生产日期,23)='2013-03-14'
group by jh.订单号,jh.产品名称) a
left join
(select sc.订单号,sc.产品名称,SUM(sc.合格品数) as 合格品数
from ceshi..shengchan sc
where CONVERT(varchar(20),sc.生产日期,23)='2013-03-14'
group by sc.订单号,sc.产品名称) b  on a.订单号=b.订单号
union
select b.订单号,b.产品名称,isnull(a.订单数量,0)as 订单数量,isnull(a.计划数量,0) as 计划数量,b.合格品数 from
(select sc.订单号,sc.产品名称,SUM(sc.合格品数) as 合格品数
from ceshi..shengchan sc
where CONVERT(varchar(20),sc.生产日期,23)='2013-03-14'
group by sc.订单号,sc.产品名称) b
left join
(select jh.订单号,jh.产品名称,SUM(jh.订单数量)as 订单数量,SUM(jh.计划数量) as 计划数量
from ceshi..jihua jh
where CONVERT(varchar(20),jh.生产日期,23)='2013-03-14'
group by jh.订单号,jh.产品名称) a  on a.订单号=b.订单号
结果.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-31 06:53 , Processed in 1.044168 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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