原文:在论坛中出现的比较难的sql问题:23(随机填充问题)


最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了。

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

1、一段SQL的写法,求方法!

http://bbs.csdn.net/topics/390705441

select * from k11  有10條紀錄

files1  files2  files3  files4

AA        BB     CC       DD

ZZ        EE     TT       YY

NN        MM     GG       UU

另外一个表User 有99条记录,现在要随机在User这个表里面随机选3条记录

select top 3 NewID() as random,[UserId] from [User]

random          UserId

E81A4DBB ming

F31B3B6C ling

16574317 Ting

将User这个表上的UserId值结果平均分配到k11上面那个表上,最后結果顯示如下

files1  files2  files3  files4  UserId

A1        BB     CC       DD     ming

A2        EE     TT       YY     ling

A3        MM     GG       UU     ling

A4        XX     XX       XX     ming

A5        XX     XX       XX     ling

A6        XX     XX       XX     Ting

A7        XX     XX       XX     ming

A8        XX     XX       XX     ling

A9        XX     XX       XX     ling

A10       XX     XX       XX     ming

sql代码:


  1. create table k11(
  2. files1 varchar(10),
  3. files2 varchar(10),
  4. files3 varchar(10),
  5. files4 varchar(10),
  6. UserId varchar(10))
  7. insert into k11
  8. select 'A1', 'BB', 'CC', 'DD', 'ming' union all
  9. select 'A2', 'EE', 'TT', 'YY', 'ling' union all
  10. select 'A3', 'MM', 'GG', 'UU', 'Ting' union all
  11. select 'A4', 'XX', 'XX', 'XX', 'ming' union all
  12. select 'A5', 'XX', 'XX', 'XX', 'ling' union all
  13. select 'A6', 'XX', 'XX', 'XX', 'Ting' union all
  14. select 'A7', 'XX', 'XX', 'XX', 'ming' union all
  15. select 'A8', 'XX', 'XX', 'XX', 'ling' union all
  16. select 'A9', 'XX', 'XX', 'XX', 'Ting' union all
  17. select 'A10', 'XX', 'XX', 'XX', 'ming'
  18. create table [user]
  19. (
  20. UserId varchar(10)
  21. )
  22. insert into [user]
  23. select 'ming' union all
  24. select 'ling' union all
  25. select 'Ting'
  26. go
  27. ;with t
  28. as
  29. (
  30. select [UserId],
  31. ROW_NUMBER() over(order by newid()) as rownum
  32. from [User]
  33. ),
  34. tt
  35. as
  36. (
  37. select *,
  38. case when rownum1 %3 =0 then 3 else rownum1 %3 end as rownum
  39. from
  40. (
  41. select *,
  42. ROW_NUMBER() over(order by getdate()) as rownum1
  43. from k11
  44. )a
  45. )
  46. select tt.files1,tt.files2,tt.files3,tt.files4,t.UserId
  47. from tt
  48. left join t
  49. on tt.rownum = t.rownum
  50. and t.rownum <=3
  51. /*
  52. files1 files2 files3 files4 UserId
  53. A1 BB CC DD ming
  54. A2 EE TT YY ling
  55. A3 MM GG UU Ting
  56. A4 XX XX XX ming
  57. A5 XX XX XX ling
  58. A6 XX XX XX Ting
  59. A7 XX XX XX ming
  60. A8 XX XX XX ling
  61. A9 XX XX XX Ting
  62. A10 XX XX XX ming
  63. */

2、随机返回100条数据:

如果表比较大,有上千万的数据,那么通过如下的代码,可以随机返回100条数据,这里的随机,不是真正意义上的随机,但确实能让人感觉是随机,也就是每次返回的数据都不一样,最关键的是速度非常快,接近于0秒,只消耗了 62毫秒。


  1. select *
  2. from
  3. (
  4. select *,
  5. ROW_NUMBER() over(order by @@servername) as rownum
  6. from dbo.xxx
  7. )t
  8. where rownum between CHECKSUM(getdate()) % 10000 and CHECKSUM(getdate()) % 10000+99
SQL Server 分析和编译时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。 (100 行受影响) SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 62 毫秒。

发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

最新文章

  1. project euler 开坑
  2. Treed – 基于拖放 操作的,强大的树形编辑器
  3. Windows Phone Studio-任何人都能开发Windows Phone App的在线工具
  4. NSProgress
  5. 长链非编码RNA(lncRNA)
  6. MS WORD 表格自己主动调整列宽,自己主动变美丽,依据内容自己主动调整
  7. 多控制器之UIApplication
  8. poj 2503 字符串hash
  9. C#操作Xml:如何定义Xsd文件
  10. innobackup增量备份与恢复
  11. 小白审计JACKSON反序列化漏洞
  12. 金三银四,如何征服面试官,拿到Offer
  13. linux 每个小时释放一次cache
  14. 利用PIL创建验证码
  15. vue与js混用
  16. acm--博弈入门1(巴什博弈1)--(HDU 1846 HDU 2049)
  17. Android中intent的分类及使用
  18. ASP.NET WebAPI 双向token实现对接小程序登录逻辑
  19. Python 2维数组90度旋转
  20. 作为一名IT从业者,你在工作和学习中,遇到哪些问题

热门文章

  1. linux中截取字段与#、$区别
  2. [原][osg][OSGEARTH]OE的关闭打开自动计算裁剪面被OE的海洋ocean影响
  3. [原][bigemap][globalmapper]通过bigemap下载全球30米DEM高程数据(手动下载)(下载全球高精度dom卫片、影像、等高线、矢量路网、POI、行政边界)
  4. shell编程系列6--shell中的函数
  5. Python json序列化时default/object_hook指定函数处理
  6. CentOS "libc.so.6: version 'GLIBC_2.14' not found"解决方法,同理'GLIBC_2.15' not found"
  7. 【相机篇】从到FlyCapture2到Spinnaker
  8. DevOps - 持续集成(Continuous Integration)
  9. _string 灵活查询
  10. Wine 总结