0

次のスクリプトを作成して、データテーブルからの受信パラメーターを模倣し、パラメーターを使用して結果をフィルター処理しようとしました。order by 句を除いて、すべて正常に動作します。基本的に、行番号による順序付けのみで、列による 2 番目の順序を提供する case ステートメントは考慮されません。

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 '%'+@sSearch+'%'
    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
4

1 に答える 1