complexe SQL-query in SQL Server 2008

Ik heb 4 hoofdtabellen in mijn database.

  1. Season --> seasonID
  2. Trials --> trialID
  3. Competition --> CID,name
  4. Camps --> campID,DivisionID(FK)
  5. Divisions ---> DivisionID
  6. Contestants --->ContestantID

Nu behoort een deelnemer tot/zijn leden van een divisie.

Dan hoort een divisie bij een kamp.

Dit alles leidt naar mijn Prestatietabel.

PRESTATIE-TABEL

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

Hoe kan ik deze prestatietabel bevragen om me de wedstrijdnaam, totaalscore en rang (rangorde ten opzichte van de totale score) van elke deelnemer in elke wedstrijd door proeven en seizoenen te geven?

Voorbeeld:

In seizoen 1 en proef 2 wil ik:

 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

Hoe kan ik dit aanpakken? Ik heb tabelvariabelen geprobeerd, draaipunten en joins, maar ik kan alleen rangschikken op wedstrijden, maar ik kan de resultaten niet aggregeren om het bovenstaande resultaat te krijgen!

0
@ ta.speot.is: Mensen hoeven tegenwoordig niet meer te tellen, ze hebben daar computers voor. :)
toegevoegd de auteur Andriy M, de bron
Ik heb 4 belangrijke tabellen in mijn database ... 1, 2, 3, ... 6
toegevoegd de auteur ta.speot.is, de bron
ja ... tnx ... denk dat we @ @ keer zo lui worden
toegevoegd de auteur froodo, de bron

1 antwoord

Ik weet niet precies hoe je de gewenste resultaten hebt berekend. Ik denk dat dit is wat je zoekt, maar als dat het geval is, moet de TotalScore in de gewenste resultaten van je vraag 10 zijn voor het laatste record, niet 20.

SELECT SeasonID, TrialID, ContestantID, CompetitionID, Total,
    DENSE_RANK() OVER(PARTITION BY CompetitionId ORDER BY Total DESC) AS [Rank]
FROM PerformanceTable
0
toegevoegd
Dus ... heeft het je probleem opgelost?
toegevoegd de auteur Kevin Aenmey, de bron
ja ... je hebt gelijk ... de totale score voor het laatste record is 10..just it veranderd ..
toegevoegd de auteur froodo, de bron