私は残念ながら私はSQLの専門家ではない、私は何をしようとしている2つのパラメータ@OrderBy
と@SortOrder
の結果を並べ替えるですが、結果がソートされますサブクエリの結果にのみ適用されます。たとえば :オーダーとサブクエリー
exec [dbo].[GetTest2] @Page=0,@Limit=150,@OrderBy=N'NetworkName',@SortOrder=N'asc'
期待どおりに動作しますが、サブクエリは、すべてのレコードを返さないため
exec [dbo].[GetTest2] @Page=0,@Limit=15,@OrderBy=N'NetworkName',@SortOrder=N'asc'
が動作しません。
どのようにレコードセット全体をソートできますか?
USE [MyContext]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE [dbo].[GetTest2]
@Page int = 0,
@Limit int = 10,
@OrderBy nvarchar(50) = 'OfferId',
@Name nvarchar(100) = NULL,
@SortOrder nvarchar(50) = 'asc'
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY @OrderBy) AS ROWNUMBER,
COUNT(*) OVER() AS [Total_Rows],
a.Name AS NetworkName,
o.*
FROM offers AS o
left outer join AffiliateNetworks AS a ON o.NetworkId = a.Id
WHERE (@Name IS NULL OR o.Name LIKE '%' + @Name + '%')) AS Paged
WHERE
Paged.ROWNUMBER > @Limit * @Page AND
Paged.ROWNUMBER <= (@Limit * @Page) + @Limit
order by
case
when @SortOrder <> 'asc' then NULL
when @OrderBy = 'Name' then Name
end ASC,
case
when @SortOrder <> 'asc' then NULL
when @OrderBy = 'NetworkName' then NetworkName
end ASC,
case
when @SortOrder <> 'desc' then NULL
when @OrderBy = 'Name' then Name
end DESC,
case
when @SortOrder <> 'desc' then NULL
when @OrderBy = 'NetworkName' then NetworkName
end DESC
END
SQLはこの構文をサポートしていません。 ストアドプロシージャでは、SQLダイアレクトが重要です。どの方言のSQLを使用していますか?オラクル? DB2? SQLサーバー? Postgres? –
私はms sqlserverを使用していますが、このステートメントをサポートしています – InferOn