J'ai regardé plusieurs autres questions similaires posées sur StackOverflow, mais rien ne semble correspondre à ma facture. Ma requête est légèrement plus complexe. Essentiellement, je dois trouver le rang de l'entrée.Requête SQL Server pour retourner le classement en fonction des résultats du jeu
Ma structure de table est:
TestEntry
Id, TotalTime, DateCreated
GameResult
GameId, TestEntryId, Duration, Score
QuestionResult
QuestionId, TestEntryId, Correct, UsersAnswer
La requête pour calculer tous les scores se fait via les éléments suivants:
CREATE TABLE #GRS
(
TestEntryId uniqueidentifier,
Score int
)
CREATE TABLE #QRS
(
TestEntryId uniqueidentifier,
CorrectAnswers int
)
/* Populate temp tables with Game/Question results */
INSERT INTO #GRS
SELECT
TestEntryId,
SUM(Score) AS Score
FROM GameResult
GROUP BY TestEntryId
INSERT INTO #QRS
SELECT
TestEntryId,
COUNT(*) CorrectAnswers
FROM QuestionResult
WHERE Correct = 1
GROUP BY TestEntryId
SELECT
Id, ISNULL(GRS.Score,0) + (ISNULL(QRS.CorrectAnswers,0) * 25) AS Score
FROM TestEntry TE
LEFT JOIN #GRS GRS ON(GRS.TestEntryId = TE.Id)
LEFT JOIN #QRS QRS ON(QRS.TestEntryId = TE.Id)
WHERE TE.TotalTime > 0
Basé sur une TestEntry.Id spécifique, je dois déterminer le rang de cette entrée. Proving difficile en raison de l'utilisation de tables temporaires, et le fait qu'il n'y a pas un "TotalScore" dans la table TestEntry, il est calculé dynamiquement.
Quelle version de SQL Server? –
Je pose la question OMG Ponies, puisqu'il y a une fonction RANK en SS08. –
@Brian Driscoll: SS2005 a été le premier à supporter les fonctions analytiques - ce que je suis d'accord, c'est ce que j'utiliserais pour cela. –