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