Хранимая процедура для получения отсортированных по страницам результатов с вычисляемым столбцом данных - PullRequest
1 голос
/ 15 февраля 2012

Я хочу создать хранимую процедуру, чтобы получить отсортированный по страницам результат, но вот поворот.Я должен добавить столбец и заполнить его вычисленными / рассчитанными данными.В настоящее время у меня есть

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

1 Ответ

0 голосов
/ 15 февраля 2012

Вы должны просто иметь возможность добавить свой вычисляемый столбец в оператор case для сортировки по нему:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...