ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 【欢度元旦】使用SQL查找指定范围内的缺失单号

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-12-31 09:26 | 显示全部楼层 |阅读模式
本帖最后由 wuxiang_123 于 2013-12-31 13:28 编辑

要求:
说明.jpg

演示效果:
演示效果.gif



该贴已经同步到 wuxiang_123的微博

SQL-查询指定范围内缺失的单号【欢度元旦】.rar

15.69 KB, 下载次数: 102

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-1-2 10:49 | 显示全部楼层
  1. SELECT IIF(stars=ends,stars,stars&'-'&ends) AS 结果
  2. FROM
  3. (
  4.         SELECT A.单号+1 AS stars,MIN(B.单号)-1 AS ends
  5.         FROM
  6.         (
  7.                 SELECT A.单号
  8.                 FROM [数据$] AS A
  9.                 INNER JOIN [查询$] AS B
  10.                 ON A.单号>=B.开始 AND A.单号<=B.结束
  11.         ) AS A
  12.         INNER JOIN
  13.         (
  14.                 SELECT A.单号
  15.                 FROM [数据$] AS A
  16.                 INNER JOIN [查询$] AS B
  17.                 ON A.单号>=B.开始 AND A.单号<=B.结束
  18.         ) AS B
  19.         ON A.单号 < B.单号
  20.         GROUP BY A.单号
  21.         HAVING MIN(B.单号) - A.单号 > 1
  22.        
  23.                 UNION ALL
  24.                
  25.         SELECT 开始 AS stars,
  26.                 (SELECT MIN(单号)-1 FROM [数据$]) AS ends
  27.         FROM [查询$]
  28.         WHERE 开始<(SELECT MIN(单号) FROM [数据$])
  29.        
  30.                 UNION ALL
  31.                
  32.         SELECT (SELECT MAX(单号)+1 FROM [数据$]) AS stars,
  33.                  结束 AS ends
  34.         FROM [查询$]
  35.         WHERE 结束>(SELECT MAX(单号) FROM [数据$])
  36. )  
复制代码
有点慢

点评

速度的确有点慢,我这台电脑跑了十几分钟还没出结果,但你的语句比我的更短。  发表于 2014-1-2 12:29

TA的精华主题

TA的得分主题

发表于 2014-1-2 10:51 | 显示全部楼层
还是用排名函数快
  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. ----------------------------------------
  12. DECLARE @star INT = 1,
  13.         @send INT = 1000
  14. ;WITH t AS
  15. (SELECT num,id=ROW_NUMBER()OVER(ORDER BY num) FROM TEST
  16. WHERE num>=@star AND num<=@send)

  17. SELECT CASE WHEN star = send
  18.        THEN CAST(star AS varchar(10))
  19.        ELSE CAST(star AS varchar(10))+ '-' + CAST(send AS varchar(10))
  20.        END AS lasts
  21. FROM
  22. (
  23.         SELECT @star AS star,(SELECT MIN(num)-1 FROM t) AS send
  24.         WHERE        @star<(SELECT MIN(num) FROM t)

  25.                 UNION ALL
  26.                
  27.         SELECT a.num + 1 AS star,b.num - 1 AS send      
  28.         FROM t AS a
  29.         JOIN t AS b
  30.         ON a.id = b.id - 1
  31.         WHERE b.num - a.num > 1

  32.                 UNION ALL
  33.                
  34.         SELECT (SELECT MAX(num)+1 FROM t) AS star,@send AS send
  35.         WHERE        @send>(SELECT MAX(num) FROM t)
  36. ) AS A
  37.    
  38. ----------------------------------------
  39. /*
  40. lasts
  41. ---------------------
  42. 1
  43. 8-9
  44. 12
  45. 16-19
  46. 21
  47. 24-25
  48. 27-28
  49. 32-33
  50. 36
  51. 40-41
  52. 44
  53. 47
  54. 53
  55. 55
  56. 59-63
  57. 66-68
  58. 74-75
  59. 79-80
  60. 82
  61. 87
  62. 91-93
  63. 97
  64. 99
  65. 101
  66. 103
  67. 108
  68. 113
  69. 116
  70. 118
  71. 125-126
  72. 130
  73. 133-135
  74. 142
  75. 144-146
  76. 151
  77. 153
  78. 158
  79. 165
  80. 168-169
  81. 172
  82. 176
  83. 180
  84. 184
  85. 188
  86. 190
  87. 194
  88. 196-197
  89. 206
  90. 208-209
  91. 211-212
  92. 217-219
  93. 222
  94. 225-226
  95. 228-229
  96. 235
  97. 237
  98. 240-241
  99. 243
  100. 246
  101. 248
  102. 250-251
  103. 259
  104. 262
  105. 265
  106. 271
  107. 274-275
  108. 277
  109. 284-285
  110. 288
  111. 293-297
  112. 299
  113. 301
  114. 304-305
  115. 308
  116. 313-314
  117. 316
  118. 319
  119. 321
  120. 323
  121. 325
  122. 327-328
  123. 330-331
  124. 333-334
  125. 337
  126. 339-341
  127. 351-352
  128. 354-355
  129. 363-364
  130. 368-370
  131. 374
  132. 378-379
  133. 385-386
  134. 392
  135. 394
  136. 405
  137. 408-409
  138. 420-421
  139. 423-424
  140. 427-428
  141. 434
  142. 436-437
  143. 440
  144. 443-444
  145. 448
  146. 451-452
  147. 454-458
  148. 460
  149. 465
  150. 467
  151. 476-477
  152. 479-480
  153. 488-489
  154. 494
  155. 496
  156. 498
  157. 500
  158. 502
  159. 504-505
  160. 508-509
  161. 512
  162. 514
  163. 519
  164. 521-522
  165. 533-534
  166. 536
  167. 541-542
  168. 544-545
  169. 549-552
  170. 557
  171. 559-560
  172. 562
  173. 564
  174. 569-570
  175. 572-574
  176. 576
  177. 580-582
  178. 585
  179. 587
  180. 592-593
  181. 596
  182. 600
  183. 602
  184. 607
  185. 611
  186. 613
  187. 617
  188. 620
  189. 622
  190. 629-630
  191. 632
  192. 635
  193. 640
  194. 642
  195. 644
  196. 647
  197. 649-654
  198. 656-658
  199. 669
  200. 674
  201. 676
  202. 678-680
  203. 682
  204. 686-690
  205. 692
  206. 694
  207. 699
  208. 701
  209. 703-705
  210. 707-709
  211. 711
  212. 713
  213. 719
  214. 725-726
  215. 734
  216. 736
  217. 743
  218. 745
  219. 748
  220. 755
  221. 760
  222. 763
  223. 766-767
  224. 769-770
  225. 772
  226. 775
  227. 777
  228. 782
  229. 784
  230. 788
  231. 792
  232. 799
  233. 801-802
  234. 806-809
  235. 814
  236. 816
  237. 820-821
  238. 825-827
  239. 829-831
  240. 844
  241. 851
  242. 855
  243. 859
  244. 861-862
  245. 866
  246. 868
  247. 870
  248. 877
  249. 879
  250. 881
  251. 883
  252. 885
  253. 891
  254. 901
  255. 903
  256. 908
  257. 912
  258. 914-915
  259. 919-922
  260. 926
  261. 928
  262. 930
  263. 932
  264. 934-935
  265. 944
  266. 948-950
  267. 952
  268. 958
  269. 962-964
  270. 966
  271. 968
  272. 970-971
  273. 973
  274. 975
  275. 977
  276. 980
  277. 987-991
  278. 993-996
  279. 999

  280. (238 行受影响)
  281. */
  282. ----------------------------------------
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-2 12:36 | 显示全部楼层
amazeyeli 发表于 2014-1-2 10:49
有点慢

我的语句:
游客,如果您要查看本帖隐藏内容请回复

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-1-2 13:06 | 显示全部楼层
amazeyeli 发表于 2014-1-2 10:49
有点慢

游客,如果您要查看本帖隐藏内容请回复

TA的精华主题

TA的得分主题

发表于 2014-1-2 16:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
慢在这里:B.单号<C.单号
数据保守有1000+9999+9998+...

点评

同意。  发表于 2014-1-2 16:16

TA的精华主题

TA的得分主题

发表于 2014-1-3 15:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-1-6 21:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
     回复
             开贴

TA的精华主题

TA的得分主题

发表于 2014-1-16 12:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 觳鳥鴝鼜 于 2014-1-16 12:30 编辑

非常有意思,试了一下,还是2楼的速度最快

TA的精华主题

TA的得分主题

发表于 2014-1-16 22:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
牛人还是很多的,大神啊
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 14:44 , Processed in 0.041168 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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