2012-02-26 20 views
0

我正在開發一個類似於ASP.NET網站中的簡單測驗引擎。我有以下的數據庫設計:如何查看測驗中得到100的參與者總數?

  • 用戶:UsernameNameDivisionCode ...等

  • 司:SapCodeDivision

  • 測驗:QuizIDTitleIsSentDescription

  • UserQuiz:UserQuizIDQuizIDDateTimeCompleteScoreUsername

我現在想的是,以顯示每次測驗的結果頁面的指示,將顯示在用戶的數量第一次參加測驗的員工部門參與者得到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) 

和所需的輸出應該是這樣的: enter image description here

編輯: 我在能夠確定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 

回答

2

最簡單的一部分查詢結果發現每個人在第一次嘗試時都獲得100分:

;with OrderedAttempts as (
    select UserName,Score,QuizID, 
     ROW_NUMBER() OVER (PARTITION BY UserName,QuizID ORDER BY DateTimeCompleted) as rn 
    from UserQuiz 
), FirstAttempts as (
    select UserName,Score,QuizID from OrderedAttempts where rn = 1 
) 
select 
    d.DivisionName, 
    COUNT(fa.Score) 
from 
    Division d 
     left join 
    User u 
     left join 
    FirstAttempts fa 
     on 
      u.UserName = fa.UserName 
     on 
      d.SapCode = u.DivisionCode 
group by 
    d.DivisionName 

希望從那裏,你可以建立你的查詢的其餘部分。

+0

+1,好的,你說得對。 – 2012-02-26 07:47:01

+0

感謝您的幫助。我非常感激,但我無法將它與上述查詢混合使用。你能幫我解決這個問題嗎? – 2012-02-26 07:52:43

+0

我對你的總體要求有點不清楚,這就是爲什麼我停在上面(雖然我忘了按QuizID分區,所以我補充說)。如果你想讓我走得更遠,你能否在你的問題中添加一些樣本數據和預期結果? – 2012-02-26 07:56:16