2010-03-19 51 views
0

排序結果我有一個存儲過程,而基本上沒有像用CHAR(1)列

select top 1 expiryDate, flag, (bunch of other columns) 
from someTable 
(bunch of joins) 
order by expiryDate desc 

因此,這將抓住最後的是過期的記錄。這適用於大多數情況,除了某些記錄的標誌只是char(1)。大部分時間只是YN

所以它會返回類似

2010-12-31 N 
2010-10-05 Y 
2010-08-05 N 
2010-03-01 F 
2010-01-31 N 

這工作,大部分的時間,但有什麼辦法由旗柱以及訂購吧?所以我想分組的結果Y,然後NF和任何其他標誌可以以任何順序持續。我認爲這只是一個順序,但由於旗幟不受字母數值的加權,我有點難住。 (注意:這些不是我的桌子,我不知道用這樣的角色是不是一個好主意,但它不是我可以改變的東西)。

+0

所以,你要扎旗打破等於expiryDate值的幫助? – gbn 2010-03-20 12:34:20

+0

@gbn,這是不可能的expiryDates將是平等的(如果重要),但是。我希望那個人在任何其他人之前標記「Y」。 – Brandon 2010-03-21 01:52:18

+0

所以這是一個問題:二次排序/領帶中斷? TOP 1給出了最新的expiryDate這就是所有,但問題強調標誌和分組 – gbn 2010-03-21 08:52:59

回答

3

你需要一個CASE語句

Order By expiryDate desc, 

    CASE flag 
     When 'Y' THEN 1 
     When 'N' THEN 2 
     When 'F' THEN 3 
     ELSE 999 
    END ASC 
-1

您可以訂購幾列:

select top 1 expiryDate, flag, (bunch of other columns) 
from someTable 
(bunch of joins) 
order by flag /* asc/desc */, expiryDate desc 
相關問題