您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> MSSQL >> sqlserver数据库如何随机选取几条数据,其中某个int类型字段相加值最接近100

sqlserver数据库如何随机选取几条数据,其中某个int类型字段相加值最接近100

来源:网络整理     时间:2016/7/20 0:22:53     关键词:

关于网友提出的“ sqlserver数据库如何随机选取几条数据,其中某个int类型字段相加值最接近100”问题疑问,本网通过在网上对“ sqlserver数据库如何随机选取几条数据,其中某个int类型字段相加值最接近100”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: sqlserver数据库如何随机选取几条数据,其中某个int类型字段相加值最接近100
描述:

sqlserver数据库

随机选取的条数不限制
有100条数据,有2个字段,
ID和Num
1     3
2     6
3     45
4     23
5     43
6     53
7     44
8     33
9     53
10   22
......
随机选取多条,然后num字段相加值最接近100,不要求等于
把ID号列出来

解决方案1:

要求加起来是100,那又怎么可能是随机? .

;WITH CTE(ID,Num) AS (
SELECT  1,3 UNION ALL SELECT
2,6 UNION ALL SELECT
3,45 UNION ALL SELECT
4,23 UNION ALL SELECT
5,43 UNION ALL SELECT
6,53 UNION ALL SELECT
7,44 UNION ALL SELECT
8,33 UNION ALL SELECT
9,53 UNION ALL SELECT
10, 22),
xx(id,sm,allid) as (
select id,num sm,convert(varchar(max),id) allid from cte where num<=100
union all
select t.id, t.num + x.sm sm, x.allid+','+convert(varchar(max),t.id) 
from cte t join xx x on t.id>x.id and t.num+x.sm<=100 )
select * from xx where sm=100 order by id
解决方案2:

这样?

;WITH CTE(ID,Num) AS (
SELECT  1,3 UNION ALL SELECT
2,6 UNION ALL SELECT
3,45 UNION ALL SELECT
4,23 UNION ALL SELECT
5,43 UNION ALL SELECT
6,53 UNION ALL SELECT
7,44 UNION ALL SELECT
8,33 UNION ALL SELECT
9,53 UNION ALL SELECT
10, 22)
SELECT TOP 1 * FROM CTE a
INNER JOIN CTE b ON a.ID <> b.ID
ORDER BY ABS(100-a.Num-b.Num)
解决方案3:

"最接近100,不要求等于"
"随机选取的条数不限制"
--> 这个需求太模糊, 多少才算是"接近100"?
如果有2条Num=50的记录,那我每次都查出这2条呢? 


以上介绍了“ sqlserver数据库如何随机选取几条数据,其中某个int类型字段相加值最接近100”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2817263.html

相关图片

相关文章