2011-12-30 4 views
1

Я создаю хранимую процедуру, которая просматривает результаты опросов, подсчитывая голоса для каждого выбора, однако когда я запускаю его, каждый оператор select находится в одной таблице, но я хочу, чтобы результат в одной таблице, в то время как каждый оператор select является столбцом, любой знает, как это сделать. спасибо :) вот мой код:Как объединить несколько операторов выбора в одну таблицу

CREATE PROC view_pollresult 
@myemail VARCHAR (30), 
@course_ID INT, 
@poll_ID INT 
AS 
IF @myemail = (SELECT page_creator FROM Course_pages WHERE course_ID = @course_ID OR @myemail IN (SELECT added_email 
FROM Lecturers_Adds_Academics_Course_page WHERE course_ID = @course_ID)) 
BEGIN 
SELECT COUNT(choice) FROM Students_Answers_Polls AS choice1_results 
WHERE poll_ID = @poll_ID AND course_page = @course_ID 
AND choice = (SELECT choice1 FROM Polls WHERE poll_ID = @poll_ID) 
SELECT COUNT(choice) FROM Students_Answers_Polls AS choice2_results 
WHERE poll_ID = @poll_ID AND course_page = @course_ID 
AND choice = (SELECT choice2 FROM Polls WHERE poll_ID = @poll_ID) 
SELECT COUNT(choice) FROM Students_Answers_Polls AS choice3_results 
WHERE poll_ID = @poll_ID AND course_page = @course_ID 
AND choice = (SELECT choice3 FROM Polls WHERE poll_ID = @poll_ID) 
SELECT COUNT(choice) FROM Students_Answers_Polls AS choice4_results 
WHERE poll_ID = @poll_ID AND course_page = @course_ID 
AND choice = (SELECT choice4 FROM Polls WHERE poll_ID = @poll_ID) 
SELECT COUNT(choice) FROM Students_Answers_Polls AS choice5_results 
WHERE poll_ID = @poll_ID AND course_page = @course_ID 
AND choice = (SELECT choice5 FROM Polls WHERE poll_ID = @poll_ID) 
END 

ответ

2

Просто сделать это один оператор:

SELECT 
    SUM(case when results.choice = p.choice1 then 1 else 0 end) as Choice1Count, 
    SUM(case when results.choice = p.choice2 then 1 else 0 end) as Choice2Count, 
    SUM(case when results.choice = p.choice3 then 1 else 0 end) as Choice3Count, 
    SUM(case when results.choice = p.choice4 then 1 else 0 end) as Choice4Count, 
    SUM(case when results.choice = p.choice5 then 1 else 0 end) as Choice5Count 
FROM 
    Students_Answers_Polls AS results 
    inner join Polls p on 
     results.poll_id = p.poll_id 
     and results.choice in (p.choice1, p.choice2, p.choice3, p.choice4, p.choice5) 
WHERE 
    results.poll_ID = @poll_ID 
    AND course_page = @course_ID 
+0

+1: Вы даже не на самом деле нуждаются в 'и' results.choice в строке(). – MatBailie

+0

@ Dems-Didn't знаю, было ли более 5 вариантов, поэтому хотелось играть в нее безопасно. Но, вы правы - OP, вам не нужна эта строка, если есть 5 и только 5 вариантов. – Eric

+0

@ Эрик большое спасибо, он работает :) –

0

Что вам нужно сделать, это создать оператор выбора, который объединяет все таблицы и возвращает только столбцы вам нужно в один стол. Попробуйте что-то вроде этого:

select count(a.choice) as choice1_results, count(b.choice) as choice2_results 
from students_answers_polls a 
inner join students_ansers_polls b on a.couseId = b.courseId 
and a.poll = (select choice1 from polls where poll_Id = @poll_ID) 
and b.poll = (select choice2 from polls where poll_id = @poll_ID) 

и так далее ...

Смежные вопросы