数据库:sql2000所有商品都放在同一个表,有些商品是有利润商品,有些商品是无利润商品。简化如下:[表:Product]
[id] [ProdName] [IsPush]
1 AAAA 1
2 BBBB 0
3 CCCC 0
4 DDDD 1
5 EEEE 0(注:IsPush表示是否有利润,bit类型,1=有利润,0=无利润。)
要求:当会员进行商品搜索时,前两个商品一定必须要被有利润商品所占用!请问如何写order by?谢谢!
注:我的数据表结构要比上面所描述的复杂得多,而且数据量大(有10万个商品左右,所以效率也要考虑的,如果一个能实现此需求的sql,但运行起来需要几秒钟,那可能不是很适合,万分感谢!)
[id] [ProdName] [IsPush]
1 AAAA 1
2 BBBB 0
3 CCCC 0
4 DDDD 1
5 EEEE 0(注:IsPush表示是否有利润,bit类型,1=有利润,0=无利润。)
要求:当会员进行商品搜索时,前两个商品一定必须要被有利润商品所占用!请问如何写order by?谢谢!
注:我的数据表结构要比上面所描述的复杂得多,而且数据量大(有10万个商品左右,所以效率也要考虑的,如果一个能实现此需求的sql,但运行起来需要几秒钟,那可能不是很适合,万分感谢!)
set @b=select top(*) from @a where IsPush=1
set @c=select * from @a where @a.id not in(@b)
select @b+@c
有利润的,如果少于2个,那么,有一个排一个,没有的话就不排。后面的按id desc排。谢谢。
set @a=select * from Product where ProdName like(商品搜索)
set @b=select top(2) from @a where IsPush=1
set @c=select * from @a where @a.id not in(@b)
select @b+@c
from Product
order by IsPush desc,id desc还是不太明白,楼主是否需要把有利润的都排在前面
select *
from Product t
order by
case
when id=(select top 2 id from product where ProdName=t.ProdName order by IsPush desc,id desc)
then 1
else 2
end,
IsPush desc,
id desc