1

以下のクエリを使用して、列に 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を使用しています

よろしくお願いいたします。

4

2 に答える 2

1

組み込みの関数を使用してみましたISNULL()か?

ISNULL(ColumnB, 1)
于 2013-08-21T14:49:37.873 に答える