随机选择记录的问题

seesea125 2007-01-12 11:41:34
我的数据库表tablea是这样的,我想选择出来5条数据
id 名称 推荐 排序
1 zxz 1 1
2 cxx 0 2
3 dks 1 3
4 koi 1 4
5 uer 1 1
6 dkj 1 1
7 wek 1 1
8 sdk 1 1

第一个条件:我想先找出推荐的数据和排序不是1的先选择出来
select * from tablea where 推荐=1 and 排序<>1
这样选择出来了
id 名称 推荐 排序
3 dks 1 3
4 koi 1 4
这两条数据,
第二个条件:在剩下的数据库中 随机的 找出是推荐的并且排序是1的3条,凑够5条选择出来

当然第一个条件选择出来的只有1条,那么就从剩下的数据库中 随机的 找出是推荐的并且排序是1的4条,总之最后结果是凑够5条记录

总结的说就是:一定把推荐的并且排序不是1的记录选择出来,但是如果凑不够五条,比如还差两条,那么就从推荐的但排序是1的记录中随即取出两条,一共凑够5条选择出来,并且排序级越高的在越在最前面

不知道我意思表达清楚没有,寻求答案,先谢谢高手和浏览此帖的兄弟!



...全文
287 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
vovo2000 2007-01-13
  • 打赏
  • 举报
回复
上面的都好像没有体现随机。

select top 5 * from @a order by case 推荐 when 1 then '' else convert(varchar(100) ,newid()) end
mengmou 2007-01-12
  • 打赏
  • 举报
回复
就楼上的。
caixia615 2007-01-12
  • 打赏
  • 举报
回复
insert into @a select 1 ,'zxz', 1 , 1 union all
select 2 ,'cxx', 0 , 2 union all
select 3 ,'dks', 1 , 3 union all
select 4 ,'koi', 1 , 4 union all
select 5 ,'uer', 1 , 1 union all
select 6 ,'dkj', 1 , 1 union all
select 7 ,'wek', 1 , 1 union all
select 8 ,'sdk', 1 , 1
select top 5 * from @a order by (case when 推荐<>1 then 推荐 else 9 end),排序
result:
id 名称 推荐 排序
----------- ---------- ----------- -----------
2 cxx 0 2
6 dkj 1 1
5 uer 1 1
1 zxz 1 1
7 wek 1 1

(所影响的行数为 5 行)
playwarcraft 2007-01-12
  • 打赏
  • 举报
回复

select top 5 * from T where 推荐=1
order by 排序 desc
ly5597025 2007-01-12
  • 打赏
  • 举报
回复
学习中
marco08 2007-01-12
  • 打赏
  • 举报
回复
--try

set rowcount 5
select * from tablea where 推荐=1 and 排序<>1 order by newid()
union all
select * from tablea where 推荐=1 and 排序=1 order by newid()
set rowcount 0
marco08 2007-01-12
  • 打赏
  • 举报
回复

--try

set rowcount 5
select * from tablea where 推荐=1 and 排序<>1
union all
select * from tablea where 推荐=1 and 排序=1
set rowcount 0
yuedeem 2007-01-12
  • 打赏
  • 举报
回复
学习了
xiequanqin 2007-01-12
  • 打赏
  • 举报
回复
select top 5 * from T order by 推荐 desc,排序 desc
xiequanqin 2007-01-12
  • 打赏
  • 举报
回复
select top 5 * from T order by 推荐desc,排序 desc
marco08 2007-01-12
  • 打赏
  • 举报
回复
create table T(id int, 名称 varchar(10), 推荐 int, 排序 int)
insert T select 1, 'zxz', 1, 1
union all select 2, 'cxx', 0, 2
union all select 3, 'dks', 1, 3
union all select 4, 'koi', 1, 4
union all select 5, 'uer', 1, 1
union all select 6, 'dkj', 1, 1
union all select 7, 'wek', 1, 1
union all select 8, 'sdk', 1, 1

set rowcount 5
select * from T where 推荐=1 and 排序<>1
union all
select * from T where 推荐=1 and 排序=1
order by 排序 desc
set rowcount 0

--result
id 名称 推荐 排序
----------- ---------- ----------- -----------
4 koi 1 4
3 dks 1 3
1 zxz 1 1
5 uer 1 1
6 dkj 1 1

(5 row(s) affected)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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