ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] SQL随机抽取

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-4-22 10:38 | 显示全部楼层 |阅读模式
如何用SQL表示随机抽取各队3名队员呢,且不能重复
比如S59在甲中签,乙队随机产生的3名名单中不应该有S59存在

望大家指导,谢谢。

随机抽取SQL.rar (6.24 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

发表于 2013-4-22 12:00 | 显示全部楼层
{:soso_e113:}印象中,我做过,但忘记在那了,内容虽然不同,但要求一样。

TA的精华主题

TA的得分主题

发表于 2013-4-22 12:01 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-23 06:32 | 显示全部楼层
本帖最后由 在和弦处等你 于 2013-4-23 06:34 编辑
wuxiang_123 发表于 2013-4-22 12:01
找到了,是这个:http://club.excelhome.net/thread-951474-1-1.html

下载学习了版主推荐看的帖子,学习知道了:除了用RND函数产生随机值外,还可以用NOW函数产生;
SQL句子也一步一步运行下来,算是看明白了四五成。
但是和我这道有点不同,版主帖子中数据源就一列,我的例子中数据源有交叉。
目前弄到这种程度,不知道如何筛选出有效的结果,望版主指导,谢谢。


  1. SELECT A.NUM, B.NUM
  2. FROM
  3.           (SELECT IIF(B.NUM=A.NUM, "A", "B") AS TYPE, B.NUM, A.NUM
  4.            FROM (
  5.                        SELECT *
  6.                        FROM
  7.                                  (SELECT TOP 3 NUM  FROM [DATA$] WHERE A="YES" ORDER BY RND(LEN(NUM))) A,
  8.                                  (SELECT NUM  FROM [DATA$] WHERE B="YES" ORDER BY RND(LEN(NUM))) B
  9.                       )
  10.             )
  11. WHERE TYPE="B"
  12. ORDER BY A.NUM, B.NUM
复制代码

随机抽取SQL.rar (8.91 KB, 下载次数: 16)

TA的精华主题

TA的得分主题

发表于 2013-4-23 09:43 | 显示全部楼层
在和弦处等你 发表于 2013-4-23 06:32
下载学习了版主推荐看的帖子,学习知道了:除了用RND函数产生随机值外,还可以用NOW函数产生;
SQL句子也 ...

A、B字段的作用是什么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-23 10:14 | 显示全部楼层
wuxiang_123 发表于 2013-4-23 09:43
A、B字段的作用是什么?

A,B两个不同的队,但是有共同的队员,如S59,随机抽取时,若A队抽中,就不能让B队再抽中。

点评

我的意思是:NO和YES的作用是什么?  发表于 2013-4-23 10:46

TA的精华主题

TA的得分主题

发表于 2013-4-23 10:47 | 显示全部楼层
在和弦处等你 发表于 2013-4-23 10:14
A,B两个不同的队,但是有共同的队员,如S59,随机抽取时,若A队抽中,就不能让B队再抽中。

好像看懂了,我试试。

TA的精华主题

TA的得分主题

发表于 2013-4-23 14:46 | 显示全部楼层
不支持SQL Server排名函数就是麻烦:
  1. SELECT P1.编号,P3.编号 FROM
  2. (SELECT TOP 3 T1.编号 FROM [Sheet1$A:C]T1
  3. LEFT JOIN
  4. (SELECT A.编号,SUM(1) AS 排序 FROM
  5. (SELECT top 3 编号,Second(NOW())*1000 MOD RIGHT(编号,2)&编号 AS 辅助  FROM [Sheet1$A:C]WHERE 甲='YES' ORDER BY 2)A,
  6. (SELECT top 3 编号,Second(NOW())*1000 MOD RIGHT(编号,2)&编号 AS 辅助  FROM [Sheet1$A:C]WHERE 甲='YES' ORDER BY 2)B
  7. WHERE A.辅助>=B.辅助
  8. GROUP BY A.编号)T2
  9. ON T1.编号=T2.编号
  10. WHERE T2.编号 IS NULL)P1,
  11. (SELECT TOP 3 T1.编号 FROM [Sheet1$A:C]T1
  12. LEFT JOIN
  13. (SELECT A.编号,SUM(1) AS 排序 FROM
  14. (SELECT top 3 编号,Second(NOW())*1000 MOD RIGHT(编号,2)&编号 AS 辅助  FROM [Sheet1$A:C]WHERE 甲='YES' ORDER BY 2)A,
  15. (SELECT top 3 编号,Second(NOW())*1000 MOD RIGHT(编号,2)&编号 AS 辅助  FROM [Sheet1$A:C]WHERE 甲='YES' ORDER BY 2)B
  16. WHERE A.辅助>=B.辅助
  17. GROUP BY A.编号)T2
  18. ON T1.编号=T2.编号
  19. WHERE T2.编号 IS NULL)P2,
  20. (SELECT A.编号,SUM(1) AS 排序 FROM
  21. (SELECT top 3 编号,Second(NOW())*1000 MOD RIGHT(编号,2)&编号 AS 辅助  FROM [Sheet1$A:C]WHERE 甲='YES' ORDER BY 2)A,
  22. (SELECT top 3 编号,Second(NOW())*1000 MOD RIGHT(编号,2)&编号 AS 辅助  FROM [Sheet1$A:C]WHERE 甲='YES' ORDER BY 2)B
  23. WHERE A.辅助>=B.辅助
  24. GROUP BY A.编号)P3
  25. WHERE P1.编号>=P2.编号
  26. GROUP BY P1.编号,P3.编号,P3.排序
  27. HAVING P3.排序=SUM(1)
复制代码

随机抽取SQL.rar

8.92 KB, 下载次数: 12

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-4-23 22:55 | 显示全部楼层
wuxiang_123 发表于 2013-4-23 14:46
不支持SQL Server排名函数就是麻烦:

这么大段SQL,我先好好消化下。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-31 03:23 , Processed in 1.057342 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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