有trade表,其中有个comid和company的id相关联
有若干产品,查询的时候,不用查出全部,一个公司只出一条,然后再给出个,这个公司还有几条记录.
因为数据海量,所以我做了一个存贮过程
CREATE proc usp_trade_Search
(
@PageSize varchar(10), 
@where varchar(1000),
@CurrentPage varchar(3),
@scope varchar(3)  
)
as   
declare @sql varchar(2000)   
set @sql = "select top " + @PageSize + " id,username,comID"
set @sql = @sql + ",(select companyName from company t where t.comID=s.comID) as CompanyName"
set @sql = @sql + ",(select memberType from company t where t.comID=s.comID) as memberType"
set @sql = @sql + ",(select count(id) As qyid from trade t where t.comID=s.comID "+@where+" ) AS compnum"
set @sql = @sql + ",Province,Subject,Details,Photo from trade s " 
set @sql = @sql + " where 1=1 and id in (select Max(id) As qyid from trade where 1=1 "+@where+" Group by comID )" if @CurrentPage > 1
begin
set @sql = @sql + " and id > ("
set @sql = @sql + "select max(maxid) from ("
set @sql = @sql +"select top "+@scope+" max(id) as maxid from trade where 1=1 "+@where+" group by comid order by max(id) ) AS T"
set @sql = @sql +")"
set @sql = @sql +"order by memberType,id"
end
print @sql
execute(@sql)
GO但是今天才发现还有个问题,memberType,公司的等级,0表示普通会员公司,10表示viP会员,要求是把所有VIP发布的产品提到前面,这下可怎么办呢,一点也没办法了

解决方案 »

  1.   

    我解释一下,几个变量
    @PageSize varchar(10), :每页记录条数,我这里是20
    @where varchar(1000), :一点条件语句,可以直接加上去的
    @CurrentPage varchar(3),:第几页
    @scope varchar(3) :已经跳过几条记录
      

  2.   

    set @sql = @sql +"order by memberType,id"
    是放到if外面的,我copy错误了
      

  3.   

    order by memberType.id desc
    <===================asc是升序,desc是降序。省略的情况默认是ASC。