2012-07-02 3 views
-1

У меня есть следующие структуры базы данных:Как показать результаты этого запроса на основе названия викторины?

Employee Table: Username, Name..... 
Divisions Table: SapCode, DivisionShortcut, DivisionName 
Quiz Table: QuizID, Title, IsSent, Description 
UserQuiz Table: UserQuizID, QuizID, DateTimeComplete, Score, Username 

(IsSent является флагом, который относится к тесту, который был послан ко всем сотрудникам)

Я следующий запрос, который retreives название опроса, которое было отправлено, и общее количество участников в каждом подразделении. Запрос работает хорошо, но в нем есть небольшая ошибка. Полученные результаты будут отображаться начиная с последней отправленной викторины. Название викторины похоже на Quiz 12, Quiz 11 и Quiz 10. Теперь запрос показывает мне, что (Quiz 9) является последней викториной. Однако последний опрос был отправлен (Quiz 12).

Итак, как изменить этот запрос, чтобы получить правильные результаты?

Запрос:

SELECT  TOP (100) PERCENT COUNT(DISTINCT dbo.UserQuiz.Username) AS [Total Number of Participants], dbo.Divisions.DivisionShortcut, dbo.Quiz.Title 
FROM   dbo.employee INNER JOIN 
         dbo.UserQuiz ON dbo.employee.Username = dbo.UserQuiz.Username INNER JOIN 
         dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
WHERE  (dbo.Quiz.IsSent = 1) 
GROUP BY dbo.Divisions.DivisionShortcut, dbo.Quiz.Title 
ORDER BY dbo.Quiz.Title DESC 
+1

Порядок заказа QuizID ... – user1166147

ответ

1

Вы заказываете по заголовкам, и название является VARCHAR. «Викторина 11» предшествует «Викторине 9» при заказе в алфавитном порядке, так как «1» и «11» предшествует «9».

Теперь, я не уверен, о том, как заполнить вашу ценность QuizID, но если это автоматически заполняется целым числом, это может быть лучше использовать

ORDER BY dbo.Quiz.QuizID DESC 

вместо этого.

Еще лучше, добавьте созданную в таблицу викторины и отсортируйте по этой колонке.

+0

Спасибо за помощь. Я очень ценю это. Я также отправил свой ответ здесь вместе с вами. – user1395782

+0

Да, я это видел. Я предполагаю, что идентификатор действительно. – rikitikitik

+0

Да, ты прав. Спасибо приятель. – user1395782

0

Наконец, я получил ответ после миллиона попыток. Решение очень просто:

SELECT  TOP (100) PERCENT COUNT(DISTINCT dbo.UserQuiz.Username) AS [Total Number of Participants], dbo.Divisions.DivisionShortcut, dbo.Quiz.Title 
FROM   dbo.employee INNER JOIN 
         dbo.UserQuiz ON dbo.employee.Username = dbo.UserQuiz.Username INNER JOIN 
         dbo.Quiz ON dbo.UserQuiz.QuizID = dbo.Quiz.QuizID INNER JOIN 
         dbo.Divisions ON dbo.employee.DivisionCode = dbo.Divisions.SapCode 
WHERE  (dbo.Quiz.IsSent = 1) 
GROUP BY dbo.Divisions.DivisionShortcut, dbo.Quiz.Title, dbo.UserQuiz.QuizID 
ORDER BY dbo.UserQuiz.QuizID DESC 
Смежные вопросы