2012-02-26 15 views
0

私は自分の会社のための単純なイントラネットクイズエンジンを開発しています。ユーザーがクイズのSTARTページに来て、自分の部門の参加者の総数を確認したいときに欲しいです。クイズの一つには、参加者が存在しない場合は、次のクエリは、ゼロが表示されるはずですが、今はそれがゼロを示していないと私は理由を知りません:このSQLクエリでゼロのCOUNT関数が表示されないのはなぜですか?

SELECT  dbo.Divisions.DivisionShortcut AS Division, COUNT(DISTINCT 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.Quiz.QuizID = @QuizID) AND (dbo.Employee.Username = @Username) 
GROUP BY dbo.Divisions.DivisionShortcut 

をそれを修正するので、どのように?

答えて

1

あなたの部門の誰もまだクイズを取得していない場合のために、外部結合が必要です。

SELECT 
    Division = d.DivisionShortcut, 
    [Number of Participants] = COUNT(DISTINCT uq.Username) 
FROM dbo.Divisions AS d 
INNER JOIN dbo.Employee AS e 
ON d.SapCode = e.DivisionCode 
LEFT OUTER JOIN dbo.UserQuiz AS uq 
ON e.Username = uq.Username 
LEFT OUTER JOIN dbo.Quiz AS q 
ON uq.QuizID = q.QuizID 
AND dbo.Quiz.QuizID = @QuizID 
WHERE e.Username = @Username 
GROUP BY d.DivisionShortcut; 
+0

0は表示されません。 –

+0

また、部門内の従業員の1人が利用可能なクイズの1つに参加している場合、参加者がいなくても、このクエリーではすべてのクイズで参加者数が1と表示されます。 –

+0

サンプルデータと希望の結果を表示してください。推測する必要はありません。 –

関連する問題