2009-05-29 6 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) 
) 

다 - 대 - 다 관계로 일과 집안일이로드된다.

물론 모든 요일의 이름이 포함 된 세 번째 테이블이 있습니다.

자, 내가 단 한 번만 하루를 진공 상태로 만들고 싶습니다. 나는 수요일에 그것을하는 것을 더 좋아한다. 그러나 만일 그것이 예정되지 않으면 나는 thursdays 위에서 그것을하고 싶다. 그리고, 그것이 예정되지 않으면, 그 다음은 중요하지 않다. 어떤 날이라도 괜찮다. 진공이 월요일과 수요일에 예정되어있는 경우

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

그러나, 나는이 결과로 월요일을 얻을 것, 나는 ': 한 행에 결과 집합을 제한하는

한 가지 방법은이 작업을 수행하는 것 수요일의 순위를 가장 높이고 싶습니다.

+0

답을 삭제하고 그 내용을 질문 자체에 추가 할 수 있습니까? –

+0

물론 답안 부분에 해결책 제안을 유지하는 것이 더 정확 해 보입니다. 괜찮아? –

답변

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 

날 순위는 수요일과 목요일은 다른 날보다 먼저 정렬 된 후, 당신은 단순히 상단 하나를 선택해야합니다.

관련 문제