2012-06-24 2 views
0

J'ai 4 tables principales dans ma base de données.requête sql complexe dans le serveur SQL 2008

  1. Saison -> seasonID
  2. Essais -> trialID
  3. compétition -> CID, le nom
  4. Camps -> Campid, DivisionID (FK)
  5. Divisions ---> DivisionID
  6. ---> ContestantID Contestants

maintenant un concurrent appartient à/sont membres d'une division.

Ensuite, une division appartient à un camp.

Tout cela conduit à ma table de performance.

TABLEAU DES PERFORMANCES

SeasonID|TrialID|CampID|DivID|CompetionID|CtestantID|Score1 |Score2 |Total 
1   1  1 1  1   1   20  20  40 
1   1  1 1  2   1   20  15  30 
1   2  1 1  1   2   10  5  15 
1   2  1 1  2   2   5  5  10 
1   2  1 1  1   1   10  30  40 
1   2  1 1  2   1   20  10  30 

Comment puis-je interroger ce tableau de performance pour me donner le nom de la concurrence, le score total et le rang (classement sur le score total) de chaque candidat dans chaque compétition par essais et par saisons ?

Exemple:

En saison 1 et l'essai 2 Je veux avoir:

SeasonID| TrialID | ContestantID| Competition | TotalScore | Rank 
    1   2   1   1   40   1 
    1   2   2   1   15   2 
    1   2   1   2   30   1 
    1   2   2   2   10   2 

Comment puis-je aller à ce sujet? J'ai essayé les variables de table, les pivots et les jointures mais je ne peux que classer par compétitions, mais je ne sais pas comment agréger les résultats pour obtenir le résultat ci-dessus!

+1

* J'ai 4 tables importantes dans ma base de données .. 1, 2, 3, ... 6 * –

+0

@ ta.speot.is: Les gens n'ont pas besoin de pouvoir compter de nos jours, ils ont des ordinateurs pour cela. :) –

+0

oui ... tnx ... suppose que nous devenons si paresseux @ fois – froodo

Répondre

0

Je ne sais pas exactement comment vous avez calculé vos résultats souhaités. Je pense que c'est ce que vous êtes après, mais, le cas échéant, la TotalScore dans les résultats souhaités de votre question devrait être 10 pour le dernier enregistrement, et non 20.

SELECT SeasonID, TrialID, ContestantID, CompetitionID, Total, 
    DENSE_RANK() OVER(PARTITION BY CompetitionId ORDER BY Total DESC) AS [Rank] 
FROM PerformanceTable 
+0

oui ... vous avez raison ... le score total pour le dernier record est 10 .. juste changé il .. – froodo

+0

Alors ... cela a-t-il résolu votre problème? –