как объединить несколько операторов выбора в одну таблицу - PullRequest
1 голос
/ 31 декабря 2011

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

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 ]

2 голосов
/ 31 декабря 2011

Просто сделайте одно утверждение:

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 голосов
/ 31 декабря 2011

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

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)

И так далее ...

...