数据库: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,但运行起来需要几秒钟,那可能不是很适合,万分感谢!)

解决方案 »

  1.   

    set @a=select * from Product where ProdName like(商品搜索)
    set @b=select top(*) from @a where IsPush=1
    set @c=select * from @a where @a.id not in(@b)
    select @b+@c
      

  2.   


    有利润的,如果少于2个,那么,有一个排一个,没有的话就不排。后面的按id desc排。谢谢。
      

  3.   


    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
      

  4.   

    select *
    from Product
    order by IsPush desc,id desc还是不太明白,楼主是否需要把有利润的都排在前面
      

  5.   

    try
    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