以下のクエリを使用して、列に null 値を含む列で並べ替えて並べ替えを取得しようとしています。ストア プロシージャにパラメーターを渡し、並べ替えの方向と入力パラメーターとして列で並べ替えます。
ALTER PROCEDURE [dbo].[tp_SelectTransactionHistorySearch]
(
@OffSetRowNo INT,
@FetchRowNo INT,
@StatusSelection NVARCHAR(MAX),
@IsReviewed Bit,
@ProjectCaseNumber VARCHAR(MAX),
@CostPageNumber VARCHAR(MAX),
@TransactionTypeChange VARCHAR(MAX),
@DescriptionChange VARCHAR(MAX),
@TrasactionCreateOnBeginDate DATE,
@TransactionCreatedOnEndDate DATE,
@TransactionUpdatedOnBeginDate DATE,
@TransactionUpdateOnEndDate DATE,
@ItemID VARCHAR(MAX),
@SortOrder VARCHAR(MAX),
@SortByColumnName VARCHAR(MAX)
)
AS
SELECT
TransactionID,IsReviewed,ItemID,CostPageNumber,Comments,
CreatedBy,CreatedDateTime,UpdatedBy,UpdatedDateTime,
TransactionDescription,TransactionTypeID,PROJCASE,
TransactionStatusID, TransactionStatusTypeName,
TransactionStatusTypeDescription,
TransactionTypeName, TransactionTypeDescription,
COUNT(*) OVER () as TotalCount
FROM
( //select
// union
// select
// union
//like select statement from union results
) ResultSet
//here i am doing sorting
ORDER BY
CASE @SortOrder
WHEN 'ASC' THEN
CASE @SortByColumnName
WHEN 'TransactionID' THEN CONVERT(VARCHAR(MAX), ResultSet.TransactionID)
WHEN 'ItemID' THEN CONVERT(VARCHAR(MAX), ResultSet.ItemID)
WHEN 'CostPageNumber' THEN ResultSet.CostPageNumber
WHEN 'Comments' THEN ResultSet.Comments
WHEN 'CreatedBy' THEN ResultSet.CreatedBy
WHEN 'CreatedDateTime' THEN CONVERT(VARCHAR(MAX), ResultSet.CreatedDateTime)
WHEN 'UpdatedBy' THEN ResultSet.UpdatedBy
WHEN 'UpdatedDateTime' THEN CONVERT(VARCHAR(MAX), ResultSet.UpdatedDateTime)
WHEN 'TransactionDescription' THEN ResultSet.TransactionDescription
WHEN 'TransactionTypeName' THEN ResultSet.TransactionTypeName
WHEN 'PROJCASE' THEN ResultSet.PROJCASE
WHEN 'TransactionStatusTypeName' THEN ResultSet.TransactionStatusTypeName
WHEN 'TransactionStatusTypeDescription' THEN ResultSet.TransactionStatusTypeDescription
END
END
ASC,
CASE @SortOrder
WHEN 'DESC' THEN
CASE @SortByColumnName
WHEN 'TransactionID' THEN CONVERT(VARCHAR(MAX), ResultSet.TransactionID)
WHEN 'ItemID' THEN CONVERT(VARCHAR(MAX), ResultSet.ItemID)
WHEN 'CostPageNumber' THEN ResultSet.CostPageNumber
WHEN 'Comments' THEN ResultSet.Comments
WHEN 'CreatedBy' THEN ResultSet.CreatedBy
WHEN 'CreatedDateTime' THEN CONVERT(VARCHAR(MAX), ResultSet.CreatedDateTime)
WHEN 'UpdatedBy' THEN ResultSet.UpdatedBy
WHEN 'UpdatedDateTime' THEN CONVERT(VARCHAR(MAX), ResultSet.UpdatedDateTime)
WHEN 'TransactionDescription' THEN ResultSet.TransactionDescription
WHEN 'TransactionTypeName' THEN ResultSet.TransactionTypeName
WHEN 'PROJCASE' THEN ResultSet.PROJCASE
WHEN 'TransactionStatusTypeName' THEN ResultSet.TransactionStatusTypeName
WHEN 'TransactionStatusTypeDescription' THEN ResultSet.TransactionStatusTypeDescription
END
END
OFFSET ( @OffSetRowNo-1 ) * @FetchRowNo ROWS
FETCH NEXT @FetchRowNo ROWS ONLY
ここでは、orderBy(ソートメソッド)を使用せずtwo rows
に、列のnull値であっても結果として取得していますが、ソート(つまり)OrderByを使用すると、結果として1行しか取得できず、null値を処理する方法がわかりませんorder by を使用する場合ですが、以下のステートメントを試しました
WHEN ColumnB IS NULL THEN 1 ELSE 0 END ASC,
しかし、これを適用すると構文エラーが発生します....この状況で注文するときにnull値を処理する方法を教えてください..私はSQL Server 2012 Editionを使用しています
よろしくお願いいたします。