2009-05-29 36 views
0

假設我有一個可以包含一個或多個值的結果集,但是我總是隻希望結果中有一個值,而具體的值比其他值更有價值。如何在SQL中創建我的結果集的習慣性排名?

我將如何在sql中解決這個問題,以便我可以在子查詢中使用它?

實施例(T-SQL特定,這就是我一起工作的口音):

我有一個表:其上裝載與所有類型的瑣事

tChore(ChoreId int primary key, ChoreDescription nvarchar(15)) 

。我也有另外一張桌子:

tDayChores(
    DayId int primary key, 
    ChoreId int foreign key references tChore(ChoreId) 
) 

哪個是加載了多天多事的關係。

當然有第三張表包含所有星期天的名稱。

現在,讓我們說我想得到一個,只有一天,真空。我更喜歡在星期三這樣做,但如果這不是計劃的話,我希望在星期四這樣做,反過來,如果那不是安排那麼沒關係,任何一天都沒問題。限制結果集一行

一種方法是做到這一點:

select top(1) 
    DayId 
from 
    tDayChores DC 
    inner join tChore C 
     on C.ChoreId = DC.ChoreId 
where 
    C.ChoreDescription = 'vacuum' 

然而,如果真空定於週一和週三,然後我會得到週一的結果,我d喜歡排列星期三最高。

+0

您可以刪除您的答案並將該詳細信息添加到問題本身 – 2009-05-29 09:35:35

回答

0

下面是一個使用子查詢的解決方案:

select top(1) 
    t.DayId 
from (
     select 
      DayId, 
      case 
       when DayId = 3 then 1 -- DayId: 3 = Wednesday 
       when DayId = 4 then 2 -- DayId: 4 = Thursday 
       else 3 
      end DayRank 
     from 
      tDayChores DC 
      inner join tChore C 
       on C.ChoreId = DC.ChoreId 
     where 
      C.ChoreDescription = 'vacuum' 
    ) t 
order by t.DayRank 

當天排名可以確保週三和週四的任何一天之前進行排序,然後你只需選擇最上面的一個。

相關問題