Что не так с этой командой sql?
Я пытаюсь создать запрос, который возвращает список студентов, которые сдали экзамен после, по крайней мере, X количества сбоев. Чтобы добиться этого, я написал следующий запрос, но также получаю следующую ошибку:
Ошибка в списке значений в предложении IN. Невозможно проанализировать текст запроса.
Я уверен, что список значений в предложении IN в порядке, хотя я не понимаю, почему он жалуется?! Вот вопрос в вопросе:
SELECT StudentID
FROM tblStudents
WHERE (Sex = @Sex) AND (StudentID IN
(SELECT StudentID
FROM tblTest
WHERE (TestID = @TestID) AND (@APass = 'true') AND (Score IN (27, 28, 29, 30)))
GROUP BY StudentID, TestID
HAVING (COUNT(*) = 1))/*By this i meant find the the user who has passed the exam (finally)*/
AND (StudentID IN
(SELECT StudentID
FROM tblTest
WHERE (TestID = @TestID) AND (Score NOT IN (27, 28, 29, 30)))
GROUP BY StudentID, TestID
HAVING (COUNT(*) >= @Times))/*And By this i meant only return students which passed the exam after x times of failing it*/
1 ответ
Решение
В ваших подзапросах слишком много )
сразу после IN
пункты - они должны быть перенесены в HAVING
линий.
SELECT StudentID
FROM tblStudents
WHERE (Sex = @Sex) AND (StudentID IN
(SELECT StudentID
FROM tblTest
WHERE (TestID = @TestID) AND (@APass = 'true') AND (Score IN (27, 28, 29, 30))
GROUP BY StudentID, TestID
HAVING (COUNT(*) = 1)))/*By this i meant find the the user who has passed the exam (finally)*/
AND (StudentID IN
(SELECT StudentID
FROM tblTest
WHERE (TestID = @TestID) AND (Score NOT IN (27, 28, 29, 30))
GROUP BY StudentID, TestID
HAVING (COUNT(*) >= @Times)))/*And By this i meant only return students which passed the exam after x times of failing it*/