【问题标题】:Stored procedure to get paged sorted results with a computed data column使用计算数据列获取分页排序结果的存储过程
【发布时间】:2012-03-06 20:44:09
【问题描述】:

我想创建一个存储过程来获得分页排序的结果,但这是一个转折点。我必须添加一列并用计算/计算的数据填充它。目前我有

ALTER proc [dbo].[pr_GetPagedSortedOrdersByUser]      
(
 @userid numeric(18,0),              
 @CurrentPage int,              
 @PageSize int,            
 @SortField varchar(200),            
 @SortOrder varchar(5),        
 @status varchar(50)        
)              
as              
begin              
with temp as              
  (              
   select * 
    ,ROW_NUMBER() OVER (order by            
        CASE WHEN @SortField = 'orderdate' AND @SortOrder = 'Desc' THEN orderdate END DESC,            
        CASE WHEN @SortField = 'orderdate' THEN orderdate END,      
        CASE WHEN @SortField = 'netamount' AND @SortOrder = 'Desc' THEN netamount END DESC,            
        CASE WHEN @SortField = 'netamount' THEN netamount END,      
        CASE WHEN @SortField = 'id' AND @SortOrder = 'Desc' THEN id END DESC,            
        CASE WHEN @SortField = 'id' THEN id END                       
       ) AS ROWID              
   from tbOrder    
   where (@status='All' or delivered=@status)and userid=@userid

  )              
  select * ,
  (
    netamount - discount
  ) as 'Gross'     
   from temp             
  where rowid>((@CurrentPage - 1) * @PageSize) and rowid <(@CurrentPage * @PageSize + 1)              

  select count(*) as [count]            
   from tbOrder    
   where (delivered=@status or @status='All')and userid=@userid       
end

注意: Gross 列不存在于数据库中,我应该能够将值 Gross 传递给 @SortField

【问题讨论】:

    标签: sql sql-server-2008 search sorting stored-procedures


    【解决方案1】:

    您应该能够将您的计算列添加到您的案例语句中以对其进行排序:

    select * 
        ,ROW_NUMBER() OVER (order by            
            CASE WHEN @SortField = 'orderdate' AND @SortOrder = 'Desc' THEN orderdate END DESC,            
            CASE WHEN @SortField = 'orderdate' THEN orderdate END,      
            CASE WHEN @SortField = 'netamount' AND @SortOrder = 'Desc' THEN netamount END DESC,            
            CASE WHEN @SortField = 'netamount' THEN netamount END,      
            CASE WHEN @SortField = 'id' AND @SortOrder = 'Desc' THEN id END DESC,            
            CASE WHEN @SortField = 'id' THEN id END,
            CASE WHEN @SortField = 'gross' AND @SortOrder = 'Desc' THEN netamount - discount END DESC,            
            CASE WHEN @SortField = 'gross' THEN netamount - discount END   
           ) AS ROWID              
       from tbOrder
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2011-01-17
      • 2017-08-01
      • 2015-08-15
      • 1970-01-01
      相关资源
      最近更新 更多