Pagination and Sorting
declare @SearchFilter nvarchar(200) = ?
if( len(@SearchFilter ) =0 ) set @SearchFilter =null
declare @OrderByColumn nvarchar(100) = ?
declare @SortOrder BIT = ? -- 0 ASC, 1 DESC
-- region Paging and ordering
-- ------------------------------------------------
declare @startIndex int = 0
declare @pageSize int = 1000
if( len(@OrderByColumn ) =0 ) set @OrderByColumn =null
if( @OrderByColumn is null) RAISERROR( 'OrderByColumn cannot be (null)!', 17, 0 );
-- ------------------------------------------------
-- endregion
;with baseTable as (
SELECT DISTINCT r.Address,
..
r.Forename,
..
r.Postcode,
r.StreetName,
r.Surname,
..
iif( len(r.Address)>0, r.Address, r.StreetName+r.Town+r.Postcode) as OrderAddress,
r.Surname + r.Forename as OrderFullName
FROM ..
WHERE IR.IncidentId = @IncidentId
AND (
@SearchFilter is null or
(
r.Address LIKE @SearchFilter
OR
r.Surname LIKE @SearchFilter
)
)
) -- end with baseTable
/*
Full Name - Sort ascending / descending order alphabetically
Age Range - Sort ascending / descending order according to date
Address - Sort ascending / descending order alphabetically
Latest Updates - Sort ascending / descending order according to date (assuming this is how it is stored)
Status - Sort ascending / descending order alphabetically
*/
select * from baseTable
ORDER BY CASE WHEN @OrderByColumn = 'Full Name' and @SortOrder = 0 then OrderFullName END,
CASE WHEN @OrderByColumn = 'Full Name' and @SortOrder = 1 then OrderFullName END DESC,
CASE WHEN @OrderByColumn = 'Address' and @SortOrder = 0 then OrderAddress END,
CASE WHEN @OrderByColumn = 'Address' and @SortOrder = 1 then OrderAddress END DESC
OFFSET @startIndex ROWS
FETCH NEXT @pageSize ROWS ONLY
Last updated