ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教SQL语句的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-8-26 22:42 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本人近来在做两表的全联合查询(集合A的全部主键都要,集合B的全部主键我也都要),遇到一个问题
表格结构一致,SQL语句一致,为什么出现两种不同的结果?烦请知道的人指点迷津
另外还有一个问题就是本人的思路比较废力,用了三个语句才写出,是否有更好的语句可以做出这种效果呢?

附件中aa.xls是正确的,sql.xls是错误的

[ 本帖最后由 bibisin 于 2009-8-26 22:56 编辑 ]

SQL.rar

5.78 KB, 下载次数: 39

TA的精华主题

TA的得分主题

发表于 2009-8-27 08:25 | 显示全部楼层
可以简化成:
select name, 期末 as 本期期初,0 as 入库,0 as 出库,0 as 期末 from [aa$]union all
select name,0 as 本期期初,入库, 出库, 期末 from [bb$]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-27 18:34 | 显示全部楼层
谢谢楼上的回复,但是此语句的效果与本人想实现的不符,相同KEY的,如本表的NAME,我需要合并起来,而不是如下一样是分开的name   
A
B
C
D
A
B
C
E

TA的精华主题

TA的得分主题

发表于 2009-8-27 20:35 | 显示全部楼层
select  A1.name, A1.入库, A1.出库, A1.期末,A2.期末 as 本月期初 from [bb$] A1 left join  [aa$] A2 on A1.name=A2.name


还是不理解:楼主两个文件查询的结果为什么不一致?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-27 21:06 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-8-27 21:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
2楼的做法能够满足楼主的要求了,再做透视表后在格式上就相符了;
我在4楼的查询有缺陷,要是能用full join 就好了,可惜不行;学习了http://club.excelhome.net/viewth ... p;extra=&page=2
中17楼的做法,用left join +right join 代替 full join ,但是这样做,name 字段会有两列。

[ 本帖最后由 penghaifeng 于 2009-8-27 21:25 编辑 ]
2009-08-27_210400.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-27 21:25 | 显示全部楼层
能否一步到位呢
我感觉SQL提供有inner join,left join,right join,怎么会没有一个全部的连接

TA的精华主题

TA的得分主题

发表于 2009-8-27 21:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
select  A1.name, A1.入库, A1.出库, A1.期末,A2.期末 as 本月期初 ,A2.name from [bb$] A1 left join  [aa$] A2 on A1.name=A2.name union all
select  B1.name, B1.入库, B1.出库, B1.期末,B2.期末 as 本月期初 ,B2.name from [bb$] B1 right join  [aa$] B2 on B1.name=B2.name where B1.name is null



这是用join 连接的变通做法,但显示上会有两个name ,尚无法统一到一列内。

[ 本帖最后由 penghaifeng 于 2009-8-27 21:34 编辑 ]
2009-08-27_210400.png

Book111.rar

3.22 KB, 下载次数: 16

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-8-27 21:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
select [aa$a1:b5].name,[aa$a1:b5].期末 as 本期期初,[bb$a1:e5].入库,[bb$a1:e5].出库,[bb$a1:e5].期末 from [aa$a1:b5],[bb$a1:e5] where [aa$a1:b5].name = [bb$a1:e5].name union all select  [aa$a1:b5].name,[aa$a1:b5].期末 as 本期期初,'' as 入库,'' as 出库,"" as 期末 from [aa$a1:b5] where [aa$a1:b5].name not in (select [bb$a1:e5].name from [bb$a1:e5]) union all select  [bb$a1:e5].name,"" as 本期期初,[bb$a1:e5].入库,[bb$a1:e5].出库,[bb$a1:e5].期末 from [bb$a1:e5] where [bb$a1:e5].name not in (select [aa$a1:b5].name from [aa$a1:b5])
如果加上限定,那两表的结果就是一致了
猜想一下,难道EXCEL有时会不知哪些才是要用的数据

TA的精华主题

TA的得分主题

发表于 2009-8-27 21:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
刚才忽略了一个因素,在SQL文件的AA表里,最后一个单元格位于J23,而在aa文件的aa表里,最后一个是B5;
尽管如此,但在SQL文件里,B5到J23的单元格也是空值,为什么影响取数呢?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-27 16:26 , Processed in 0.057583 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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