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

nxgliming 2016-07-01 04:07:58
随机选取的条数不限制
有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号列出来
...全文
343 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nxgliming 2016-07-04
  • 打赏
  • 举报
回复
引用 4 楼 tcmakebest 的回复:
要求加起来是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
我没有要求加起来是要100,是要sum值最接近100,非常感谢你的思路,在你的代码上稍微改了下就满足我的要求了
tcmakebest 2016-07-02
  • 打赏
  • 举报
回复
要求加起来是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
Ginnnnnnnn 2016-07-02
  • 打赏
  • 举报
回复
这样?
;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)
nxgliming 2016-07-01
  • 打赏
  • 举报
回复
抱歉,没写清楚,不要求等于100的意思是,当可以满足100时取100,当所有组合加起来值无法等于100时取值最接近100的 如果有2条Num=50的记录,那么这两条记录就是符合要求的, 如果有多个组合加起来等于100(有2条记录Num相加=100,或,有3条记录num相加=100,有4条记录相加=100),这个就是随机选取的条数不限制的意思,那么随便取一组就行了 如果没有哪种组合相机等于100,那么就取相加=99的,或98的,或97的,哪个组合最接近100,就取哪个
唐诗三百首 2016-07-01
  • 打赏
  • 举报
回复
"最接近100,不要求等于" "随机选取的条数不限制" --> 这个需求太模糊, 多少才算是"接近100"? 如果有2条Num=50的记录,那我每次都查出这2条呢?

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧