首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

随机选择记录的有关问题

2012-03-21 
随机选择记录的问题我的数据库表tablea是这样的,我想选择出来5条数据id名称推荐排序1zxz112cxx023dks134ko

随机选择记录的问题
我的数据库表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


5 uer 1 1
1 zxz 1 1
7 wek 1 1

(所影响的行数为 5 行)
[解决办法]
就楼上的。
[解决办法]
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)


[解决办法]
select top 5 * from T order by 推荐desc,排序 desc

[解决办法]
select top 5 * from T order by 推荐 desc,排序 desc
[解决办法]
学习了
[解决办法]
上面的都好像没有体现随机。

select top 5 * from @a order by case 推荐 when 1 then ' ' else convert(varchar(100) ,newid()) end

热点排行