我想通過使用下面的查詢,如將參數傳遞給存儲過程與排序方向和按作爲輸入列參數如何處理空值,當我們在sql服務器中排序
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
因爲即使他們是在列空值的結果,但與排序(即)排序依據,我能夠得到的只有一個行作爲結果 ,我不知道如何處理空值時使用順序,但我已經嘗試以下語句
WHEN ColumnB IS NULL THEN 1 ELSE 0 END ASC,
但是當應用此一個我得到的語法錯誤.... 將任何請提出任何想法如何時爲了使其在這種情況下.. 我使用SQL Server 2012版來處理空值
非常感謝在提前....
很多感謝它的完美工作...... –