2012-02-15 14 views
1

ページ順ソート結果を取得するストアドプロシージャを作成したいが、私は、列を追加し、計算/計算されたデータでそれを埋める必要があります。現在、私は持っている計算されたデータ列を使用してページングされたソート結果を取得するストアドプロシージャ

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 [email protected])and [email protected] 

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

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

注:Gross列は、データベースに存在しないと私はあなたがちょうどあなたのcase文にあなたの計算された列を追加することができるはず@SortField

答えて

0

に値Grossを渡すことができるはずですそれによって並べ替える:

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 
+0

ありがとう –

関連する問題