ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请问各位老师,我的这两个表能用SQL查询得出结果吗?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-12-26 08:19 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
表1:                                                    表2:
货单号    供货商    货物名称                  供货商        起始货单号        终止货单号
A0001      AAA         货物A                     AAA              A0001               A0010
A0002      AAA         货物G                     BBB              B0001               B0100
A0005      AAA         货物C
B0002      BBB         货物F
A0008      AAA         货物E
B0003      BBB         货物B

能不能根据表2的起始货单号和终止货单号,在表1中用SQL查询语句得到各供货商各缺少了哪些货单号。
如上表,应得结果是:A0003、A0004、A0006、A0007、A0009、A0010
B0001、B0004-B0100。
我现在用的是笨方法,先将表1货单号排序,然后循环检查每条记录。因为表1数据量太大(100多万条),
运行起来没效率太耗时了!所以特意来请教各位老师能用SQL查询解决吗?或者有没什么简单快捷的方法,感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-26 08:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
补充一下,我是用VB6做的前台程序,用ADO连接ACCESS数据库作后台

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-26 23:11 | 显示全部楼层
大家都在忙吗?帮帮忙嘛,如果SQL查询做不到也可以给点好的思路,看能不能解决。谢谢了!

TA的精华主题

TA的得分主题

发表于 2013-12-27 09:07 | 显示全部楼层
简单的做法就是:表2改成与表1一样的表,然后两表left join一下即可

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-12-27 23:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
amazeyeli 发表于 2013-12-27 09:07
简单的做法就是:表2改成与表1一样的表,然后两表left join一下即可

表2设计成这样是因为表1是做入仓资料录入用的,在录入时只要输入货单号就会从表2查询货单号段得到供应商、货物名称等数据写入表1,总的来说表2的功能就相当于自动识别。如果将表2也改成表1一样,那么表2会比表1数据量更大,况且现在改起来也很麻烦

TA的精华主题

TA的得分主题

发表于 2013-12-28 11:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
最简单的方法是使用辅助列。

TA的精华主题

TA的得分主题

发表于 2013-12-30 08:40 | 显示全部楼层
我认为简单的你认为复杂,只好给出我认为复杂的
  1. USE tempdb
  2. GO
  3. IF OBJECT_ID('TEST') IS NOT NULL
  4.   DROP TABLE TEST;
  5. GO
  6. CREATE TABLE TEST
  7. (
  8.   num                INT
  9. );
  10. GO
  11. INSERT INTO TEST VALUES(1);
  12. INSERT INTO TEST VALUES(2);
  13. INSERT INTO TEST VALUES(5);
  14. INSERT INTO TEST VALUES(8);
  15. INSERT INTO TEST VALUES(10);
  16. INSERT INTO TEST VALUES(11);
  17. INSERT INTO TEST VALUES(16);
  18. GO
  19. ----------------------------------------
  20. SELECT num+1 AS num_star,
  21. (SELECT MIN(t.num) FROM TEST AS t WHERE t.num > a.num )-1 AS num_end
  22. FROM TEST AS a
  23. WHERE NOT EXISTS
  24. (SELECT * FROM TEST AS b WHERE b.num = a.num + 1)
  25. AND num < (SELECT MAX(num) FROM TEST)
  26. ----------------------------------------
  27. /*
  28. num_star    num_end
  29. ----------- -----------
  30. 3           4
  31. 6           7
  32. 9           9
  33. 12          15
  34. */
复制代码

TA的精华主题

TA的得分主题

发表于 2013-12-30 09:00 | 显示全部楼层
  1. SELECT A.num+1 AS num_star,MIN(B.NUM)-1 AS num_end
  2. FROM TEST A
  3. JOIN TEST B
  4. ON B.num > A.num
  5. GROUP BY A.num
  6. HAVING MIN(B.NUM) - A.num > 1
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-12 16:28 | 显示全部楼层
amazeyeli 发表于 2013-12-30 09:00

谢谢老师的回复,最近比较忙现在才看到。我在ACCESS里执行您的代码提示说From子句语法错误
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 13:23 , Processed in 0.042683 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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