ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 相似条件很多怎么样进行1对1 left join

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-13 14:15 | 显示全部楼层 |阅读模式
本帖最后由 XWHy11111 于 2018-3-14 17:39 编辑

使用Left join 将两张表的数据按照条件“RFCD” 和 “CustomerPart” 进行"PO"和 “lotid”逐行匹配连接。但因为相似的条件有很多行,所以会出现1对N的情况。
怎么能够让Excel 进行1对1的匹配,即 使用过了一行就不再匹配了,就不会出现1对N的情况。
我希望的是逐行匹配,用过的一行就不再使用,就不会出现1对N 的情况。
如果Join left 不能实现,还可以有什么其他方法吗?
求大神帮忙,非常感谢。

(我是在汇总结果表中直接使用OLE DB借口获取原始数据表中的数据。)

黄色部分截图,是我手打希望得到结果,也在我的汇总结果 book里面。

自己使用的语句如下
SELECT *
FROM [sheet1$] A
LEFT OUTER JOIN
[sheet2$] B
on A.CustomerPart=B.CustomerPart and A.RFCD=B.RFCD



Capture 1.PNG
Capture2.PNG

数据.zip

54.79 KB, 下载次数: 14

TA的精华主题

TA的得分主题

发表于 2018-3-13 14:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你可以先对其中一个表两个目标字段去重,再用另外一个表right jion去重后的中间表
你的模拟结果数据不全的吗?

TA的精华主题

TA的得分主题

发表于 2018-3-13 22:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 today0427 于 2018-3-14 08:21 编辑

之所以会有重复数据,是因为sheet2里面的数据,在前面两个字段完全相同的前提下,还有一个字段Lotid,同时存在好几个不同的值,如图: 2.png




当你做两表连接时,它会每一条不同Lotid值给你匹配一次,所以会出现很多重复值。
要想不重复,首先,匹配的时候剔除lotid字段,然后做一个去重的处理,如图:


QQ图片20180313210930.png


TA的精华主题

TA的得分主题

发表于 2018-3-13 22:40 | 显示全部楼层
附件传上…………

原始数据.rar

32.9 KB, 下载次数: 4

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-14 12:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
today0427 发表于 2018-3-13 22:38
之所以会有重复数据,是因为sheet2里面的数据,在前面两个字段完全相同的前提下,还有一个字段Lotid,同时 ...

我要的就是lotID的数据。。根据相同CustomerPart 和RFCD 两张表进行逐行匹配,将PO 和LotID 匹配。
匹配过一次的数据,就丢弃不进行第二次匹配,不用left join 还可以其他什么方法吗。
非常感谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-14 12:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看见星光 发表于 2018-3-13 14:43
你可以先对其中一个表两个目标字段去重,再用另外一个表right jion去重后的中间表
你的模拟结果数据不全的 ...

“希望没有重复的”这张表里,是我手动打的 结果例子,太多行了,我就不打全了。
“有重复的”这张表 是我使用我的SQL 语句实际得出的结果。

另,我的目的是 根据相同CustomerPart 和RFCD 两张表进行逐行匹配,将PO 和LotID 匹配。
谢谢大神。

TA的精华主题

TA的得分主题

发表于 2018-3-14 14:22 来自手机 | 显示全部楼层
XWHy11111 发表于 2018-3-14 12:48
“希望没有重复的”这张表里,是我手动打的 结果例子,太多行了,我就不打全了。
“有重复的”这张表 是 ...

没看明白,路过帮顶

TA的精华主题

TA的得分主题

发表于 2018-3-14 15:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不行就用循环吧。。。。

TA的精华主题

TA的得分主题

发表于 2018-3-14 15:58 | 显示全部楼层
既然一个po对应多个lotid,那么到底应该匹配哪个lotid,总得有个规则吧,比方第一次匹配成功后面的就不要了,就用first(lotid),只匹配最后一个就用last(lotid)

TA的精华主题

TA的得分主题

发表于 2018-3-14 17:15 | 显示全部楼层
你看一下这个行不行
SELECT * from [sheet1$] A  LEFT JOIN (select CustomerPart,RFCD,first(Lotid) as ID from [sheet2$] group by CustomerPart,RFCD) B  on (A.CustomerPart=B.CustomerPart and A.RFCD=B.RFCD)
QQ图片20180314171159.png




原始数据.rar

34.97 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-27 04:18 , Processed in 0.038443 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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