我有一个查询可以输出按各种列排序的结果,但我需要能够处理排序列中的空值。任何帮助将不胜感激。这是一个例子:
Table [People]
Columns [Name], [Birthday] (NULLABLE)
Query where@Sort
是一个 int 指定要对哪一列进行排序,@pageStart
and@pageEnd
是 int 告诉查询要返回哪些结果。(我只返回行的选择,所以我使用[RowNum]
嵌套在 CTE 中的列。还有其他处理发生,但为简单起见,我将其删除。):
;with results as(
SELECT [Name], [Birthday], ROW_NUMBER() OVER (ORDER BY
CASE WHEN @Sort = 0 THEN [Name] END,
CASE WHEN @Sort = 2 THEN [Birthday] END,
CASE WHEN @Sort = 1 THEN [Name] END DESC,
CASE WHEN @Sort = 3 THEN [Birthday] END DESC) AS RowNum
FROM [People]
)
SELECT [Name], [Birthday]
FROM results
WHERE RowNum BETWEEN @pageStart AND @pageEnd
--ORDER RowNum
--The last order by doesn't seem to be needed
我知道可以使用以下语句处理空值:
ORDER BY (CASE WHEN [columnName] is NULL THEN 1 ELSE 0 END), [columnName]
我很难将其应用于我正在使用的查询......任何帮助将不胜感激!让我知道我是否可以澄清任何事情。