0
我正在開發一個類似於ASP.NET網站中的簡單測驗引擎。我有以下的數據庫設計:如何查看測驗中得到100的參與者總數?
用戶:
Username
,Name
,DivisionCode
...等司:
SapCode
,Division
。測驗:
QuizID
,Title
,IsSent
,Description
。UserQuiz:
UserQuizID
,QuizID
,DateTimeComplete
,Score
,Username
我現在想的是,以顯示每次測驗的結果頁面的指示,將顯示在用戶的數量第一次參加測驗的員工部門參與者得到100分。 (所以如果用戶再次參加測驗,他的第二次嘗試將不被考慮在此查詢中)。 那麼該怎麼做(如何顯示第一次獲得100的參與者人數)?
My Query which is not correct is:
SELECT dbo.Divisions.DivisionShortcut, COUNT(dbo.UserQuiz.Username) AS [Number of Participants]
FROM dbo.Divisions INNER JOIN
dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode INNER JOIN
dbo.UserQuiz ON dbo.employee.Username = dbo.UserQuiz.Username INNER JOIN
dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID
WHERE (dbo.UserQuiz.QuizID = @QuizID)
GROUP BY dbo.Divisions.DivisionShortcut, dbo.UserQuiz.Score
HAVING (dbo.UserQuiz.Score = 100)
和所需的輸出應該是這樣的:
編輯: 我在能夠確定QuizID正掙扎:
;with OrderedAttempts as (
select Username,Score,QuizID,
ROW_NUMBER() OVER (PARTITION BY Username,QuizID ORDER BY DateTimeComplete) as rn
from UserQuiz
WHERE (dbo.UserQuiz.QuizID = @QuizID)
), FirstAttempts as (
select Username,Score,QuizID from OrderedAttempts where rn = 1
)
select
d.DivisionName,
COUNT(fa.Score)
from
Divisions d
left join
Employee e
left join
FirstAttempts fa
on
e.Username = fa.Username
on
d.SapCode = e.DivisionCode
group by
d.DivisionName
+1,好的,你說得對。 – 2012-02-26 07:47:01
感謝您的幫助。我非常感激,但我無法將它與上述查詢混合使用。你能幫我解決這個問題嗎? – 2012-02-26 07:52:43
我對你的總體要求有點不清楚,這就是爲什麼我停在上面(雖然我忘了按QuizID分區,所以我補充說)。如果你想讓我走得更遠,你能否在你的問題中添加一些樣本數據和預期結果? – 2012-02-26 07:56:16