[英]Stored procedure to get paged sorted results with a computed data column
我想制作一個存儲過程以獲取分頁的排序結果,但這是一個難題。 我必須添加一列,並用計算/計算的數據填充它。 目前我有
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
您應該只能夠將計算列添加到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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.