日期:2014-05-18  浏览次数:20536 次

随机选择记录的问题
我的数据库表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条选择出来,并且排序级越高的在越在最前面

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




------解决方案--------------------

--try

set rowcount 5
select * from tablea where 推荐=1 and 排序 <> 1
union all
select * from tablea where 推荐=1 and 排序=1
set rowcount 0
------解决方案--------------------
--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
------解决方案--------------------

select top 5 * from T where 推荐=1
order by 排序 desc

------解决方案--------------------
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