ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] And在Where及Left Join...On里的使用问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-1-16 15:41 | 显示全部楼层 |阅读模式
如题, 原来认为不是问题的问题, 结果在应用中碰到了
请见SQL如下:

Select a.*,b.申请日期,b.交易净值
From `工作簿路径`.`交易$` a
Left Join `工作簿路径`.`查询$` b
on a.基金名称=b.基金名称 and a.交易类型=b.交易类型 and a.确认日期=b.确认日期


使用以上SQL, 意在给现有工作表(交易)添加两列来自同一工作簿不同工作表(查询)的数据
我想要的条件是, 同时匹配ON后面三个条件(基金名称,交易类型,确认日期). 只所以要同时匹配, 是因为每个条件下都有重复值, 只有三个条件确定, 才能确定数据位置
具体可参见所附截图
然而导入结果只有表头没有内容
我想是On后面的条件无法匹配, 可是不知原因为何
是因为And不能多次使用,还是其他原因
同样的要求,有什么其他简单易行的办法可以实现

PS: 我想这是一个比较简单的概念性问题,所以没有附上表格

[ 本帖最后由 newage 于 2010-1-16 15:43 编辑 ]
截图1263627124.png

TA的精华主题

TA的得分主题

发表于 2010-1-16 19:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请参见此贴:http://club.excelhome.net/thread-519021-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-16 23:53 | 显示全部楼层
谢谢楼上的指点
刚才重新学习了一下笛卡尔积和唯一ID的解决办法
但是还是有些地方需要弱弱地请教一下:
    对于本例的笛卡尔积我理解为:由两个集合(表格)直接进行运算, 由于单个字段可能存在多个相同数据, 以致列与列的匹配变成组合的运算, 因而形成笛卡尔积. 这个过程和JSSY提到的数量乘单价的计算错误问题, 虽然类似,但是不一样. 数量乘单价是直接发生在数据透视表里, 也就说数据透视表默认将这样的运算视为笛卡尔积, 而本例则是列匹配所引伸出的组合问题.
    所以,在数据透视表内,只要两个集合相乘,就会产生笛卡尔积.而对于多表合并时产生的笛卡尔积,则主要产生于单个字段内存在的多个相同数值,如果没有这类情况,则可以不考虑笛卡尔积的影响.
    这是我的理解,不知是否正确.
    另外,&在SQL里可以简单地理解为对于数值(文本或数字)的合并吗? [查了一下标准定义,代表位与运算,由二进制数上下对应(只当1&1才等于1)得出与运算结果]

PS:对于原先的提问我又修正过了,因为原来的一些问题是因为我没看清语句

[ 本帖最后由 newage 于 2010-1-17 16:20 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-17 16:22 | 显示全部楼层
上面的问题我更新过了

后续问题,很简单:
在Microsoft Query里, 我成功添加了做&运算的计算字段,合并了数值构成唯一的ID
可见附图
但是在MQ里如何实现以计算字段为条件的左连接? 即在左连接的时候无法选择计算字段
只有通过SQL直接导入?
不是我懒...只是技术探讨...
谢谢

[ 本帖最后由 newage 于 2010-1-17 16:33 编辑 ]
截图1263716671.png

TA的精华主题

TA的得分主题

发表于 2010-1-17 20:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
首先向newage的钻探精神表示敬佩!
        简单的说几句个人的体会,因不是专业出身,不对之处,请各位包涵并不吝赐教。

        Excel之所以应用如此广泛,并不单是它能满足我们的需要。
        首要的是在我们使用它的时候,它对我们几乎没有任何限制:在Excel中,比如,在同一个单元格里面,我们可以输入数字,日期,文本……这使得我们用它的时候,感到极其舒服——没有限制嘛,无法无天。
        同时,每个单元格都是独立的,它与任何其他的单元格没有任何联系,这使得我们在删除、添加单元格、行、列、表、工作簿时无所拘束,并且,这些操作并不一定影响我们想得到的结果。单元格是Excel最小的、可操作的存储信息的单位。
        以上两点是Excel最重要的灵活之处,如果没有这些,可能我们中的大多数人(当然,包括我自己),可能到现在并不一定知道Excel是什么。
        而它们正是与数据库(关系数据库管理系统,RDBMS)的最重要区别:
        在数据库中,表(二维表)是信息存储的所在,表由记录集组成,记录由不同的字段组成:一行就是一条记录,同一表中所有的记录有一个共同的特征:拥有相同数量的字段,同一字段下的不同行(类似于Excel里面的单元格)的数据类型是相同的,字段之间是独立的。记录(类似于单元格)之间是独立的。在数据库的表里,删除记录如同在Excel里删除单元格一样,几乎没有限制。但是,当要删除某个字段时,却不一定能随心所欲:数据库的表与表之间存在联系,而这个联系,是以表中的字段来关联的。这一点是关系数据库管理系统的核心精华之一(个人以为,莫砸 )。理解了这一点,面对任何关系型数据库时,我们都能心中有“字段”,而不是记录-虽然它是我们想要的。SQL语言中的查询实现语句select主要就是对记录进行选择并将记录以我们想要的结果呈现出来。而select的记录,是以字段的方式来呈现的,比如select * from table1,选取table1中的所有记录的所有字段,select 字段1,字段2 from table1则选择table1中所有记录的字段1和字段2。
        字段和字段之间是可以进行运算的,比如楼上的提到得"&"运算符(这个运算符,在几大主流数据库中有各自的符号),假设在table1中两个字段"姓名","年龄",当我们选择select 姓名,年龄,姓名&年龄 from table1中时,我们可能得到的结果是:张三,39,张三39。这个结果可以以表的形式返回(Excel支持这种方式,并且可以返回到某一指定的区域,虽然指定时只指定某一个单元格)。
        Excel中的外部查询,到最终无论返回的是表、透视表还是透视图,在后台(内存中),我猜测,应该是以表的形式储存的。
        到此,我想这个所谓的唯一ID应该可以明白了。当然,关系数据库和Excel(虽然Excel也是一种数据库)的区别,还有很多很多,这些,就留给专家了。

[ 本帖最后由 masterexcel 于 2010-1-17 20:12 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-1-17 21:24 | 显示全部楼层
谢谢
"记录"的概念又加深了我对表运算的理解

"Excel中的外部查询,到最终无论返回的是表、透视表还是透视图,在后台(内存中),我猜测,应该是以表的形式储存的。"
我想应该是这样的, 对于数据库来说, 应该先有字段,再有数据(文本和数字等), 然后构成一个完整的二维(行列)表. 同时, 在一个既定的表里, 数据或记录可以为空, 而字段不能.
SELECT查询的过程, 应该就是在表里定位对应的字段和记录, 构成一个我们想要的二维子表(可以由任意行列组成), 在这个二维子表里, 某行的数据的集合就是一条记录(正如Excel"数据" - "记录单"里所表示的)
多表合并, 同样是两个由SELECT定义的二维子表的合并, 这时匹配的条件可以是一个某条记录里的指针数据(唯一), 也可以如masterexcel所提到的&运算后的数据, 其实Left Join所合并的是两个加入&运算结果项的新的子表.
多表合并时, 如果某条记录(行)中选定字段(列)的数据不是唯一的, 则匹配时便构成了一个选择集合而不是指针, 当设定了多个这样的匹配条件时, 便成了集合与集合的运算(乘法), 于是就有了笛卡尔积(正如我上面用Where...And...定义的三个具有重复条目的字段)

所以我的结论是: 多表合并时, 只要选定字段(列)有重复的项目, 就需要进行&组合(有待高手检验)

跑题地提一下, Microsoft Query在应用上貌似还不如直接打SQL方便, 就比如我上面提到的情况, 有办法实现吗? 好处是能进行一些简单的合并. 或者还有一些帮助之外的技巧我没有掌握?

就总结到这里, 又算解决了一个问题, 不过后面还有更多的问题等着我...
软件只是工具, 但是将软件的潜能发挥出来, 它就可以是生产力, 对此我深信不疑 : )
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-28 09:33 , Processed in 0.047285 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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