Я написал следующий сценарий, чтобы имитировать входящие параметры из данных и попытаться отфильтровать результаты с использованием параметров. Все работает отлично, за исключением порядка. В основном это только заказы по номеру и не учитывает утверждение дела, которое обеспечивает второй порядок по столбцу.Обработка SQL Server для данных jquery datatables по выпуску?
declare @sSortColumn as nvarchar(50)='Country';
declare @sSortDirection as nvarchar(5) = 'Desc';
declare @sSearch as nvarchar(50) = '';
declare @iDisplayLength as int = 20;
declare @iDisplayStart as int = 20;
declare @sIDsearch as int = CASE WHEN ISNUMERIC(@sSearch) = 1 THEN CAST(@sSearch AS INT) ELSE 0 END;
WITH media AS
(
select ROW_NUMBER() OVER (ORDER BY mc.id) as RowNumber,
mc.id,mc.Name, mc.CityID,lc.Name as Country
from Lookup_MediaChannels mc
left join Lookup_SonarMediaTypes st on mc.SonarMediaTypeID = st.ID
left join Lookup_SonarMediaGroups sg on sg.ID = st.SonarMediaGroupID
left join Lookup_MediaTypes mt on mc.MediaTypeID = mt.ID
left join Lookup_SonarMediaGroups sg1 on sg1.ID = mt.MediaGroupID
left join lookup_Countries lc on lc.id = mc.countryid
where mc.Name like '%'[email protected]+'%'
and (sg1.ID=1 or sg.ID =1)
or mc.id = @sIDsearch
)
SELECT RowNumber, Name, Country
FROM media
WHERE RowNumber BETWEEN (@iDisplayStart+ 1) AND (@iDisplayStart+ @iDisplayLength)
order by rownumber,
CASE WHEN @sSortColumn = 'Name' AND @sSortDirection = 'Desc'
THEN Name END DESC,
CASE WHEN @sSortColumn = 'Name' AND @sSortDirection != 'Desc'
THEN Name END,
CASE WHEN @sSortColumn = 'Country' AND @sSortDirection = 'Desc'
THEN Country END DESC,
CASE WHEN @sSortColumn = 'Country' AND @sSortDirection != 'Desc'
THEN Country END
Может быть, вы хотите, чтобы упорядочить по сортировать по высказываниям случае первый затем RowNumber? похоже, что рядовой номер будет уникальным для каждого имени. –
номер строки должен быть отсортирован первым, потому что он используется для извлечения диапазона элементов между двумя числами «WHERE RowNumber BETWEEN (@ iDisplayStart + 1) AND (@ iDisplayStart + @iDisplayLength)» – Xerxes
, если у вас есть данные row_num | name 1 | TV 2 | Радио, то, если вы сначала закажете по номеру строки, заказ по имени второй не будет иметь никакого эффекта, у вас всегда будет телевизор перед радио, потому что row_num 1 приходит до 2 –