DECLARE @Table AS TABLE (Id INT, Category VARCHAR(15), Review VARCHAR(15))
INSERT INTO @Table VALUES (1,'Site',NULL),(1,NULL,'Yes'),(1,'Sited','Yes')
SELECT
Id
,Category
,Review
,Rnk = ROW_NUMBER() OVER (ORDER BY
CASE WHEN ISNULL(Review,'') = '' THEN 1 ELSE 0 END
,CASE WHEN ISNULL(Category,'') = '' THEN 1 ELSE 0 END)
FROM
@Table
ORDER BY
Rnk DESC
使用CASE表達式來檢驗領域NULL值,如果空使它比不爲空更大的值。對Category
和Review
這樣做。如果你想聯繫開關ROW_NUMBER()
到DENSE_RANK()
。通過信息添加分區和其他順序以優化更多測試用例。
在你的CASE表達式,你可以做各種事情一樣,如果你想第二排序空值絕對去年和空白(空字符串)到最後,你可以做這樣的事情
CASE
WHEN Review IS NULL THEN 2 --Nulls last
WHEN Review = '' THEN 1 -- Empty String 2nd To Last
ELSE 0 --
END
你能給你預期的產出嗎?我的意思是,人們會先走哪條規則?你訂購哪一列? – DVT
已更新的問題。希望看到空格和空位在Dense_Rank排名最後的排名 – Toby
您是否遇到問題以正確的順序讓他們或給他們排名? – Fritz