2009-05-29 7 views
0

Dites que j'ai un jeu de résultats qui peut contenir une ou plusieurs valeurs, mais je veux toujours seulement une valeur dans le résultat, et les valeurs spécifiques valent plus que d'autres.Comment créer un classement habituel de mon jeu de résultats dans SQL?

Comment est-ce que je pourrais résoudre ceci en SQL pour que je puisse l'utiliser dans une sous-requête?

Exemple (T-SQL spécifique, c'est l'accent que je travaille avec):

J'ai une table:

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

qui est chargé avec tous les types de tâches. J'ai aussi une autre table:

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

qui est chargé avec les jours et les tâches dans un grand nombre à plusieurs.

Il existe bien sûr une troisième table contenant le nom de tous les jours de la semaine. Maintenant, disons que je voudrais avoir un, et un seul, jour pour aspirer. Je préfère le faire le mercredi, mais si ce n'est pas prévu alors j'aimerais le faire le jeudi, et à son tour si ce n'est pas prévu alors ce n'est pas grave, n'importe quel jour est bien.

Une façon de limiter le jeu de résultats à une ligne serait de le faire:

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

Cependant, si le vide est prévue pour le lundi et le mercredi, je recevrais lundi en conséquence, et je d aime se classer mercredi le plus haut.

+0

Pouvez-vous supprimer votre réponse et ajouter ce détail à la question elle-même? –

+0

Bien sûr, mais il semblait plus correct de garder la suggestion de solution dans la partie réponse. Semble bien? –

Répondre

0

est ici une solution à l'aide d'une sous-requête:

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 

Le rang jour veille à ce que le mercredi et le jeudi sont triés avant tout autre jour, et vous suffit de choisir le haut.

Questions connexes