【问题标题】:how to combine several select statements into one table如何将多个选择语句组合到一个表中
【发布时间】:2012-01-30 20:19:42
【问题描述】:

我正在创建一个存储过程,通过计算每个选项的票数来查看民意调查结果,但是当我运行它时,每个 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

【问题讨论】:

    标签: mysql sql stored-procedures ssms


    【解决方案1】:

    只写一个语句:

    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
    

    【讨论】:

    • +1 : 你甚至不需要and results.choice in () 行。
    • @Dems-不知道是否有超过 5 个选择,所以想稳妥行事。但是,您是对的——OP,如果有 5 个且只有 5 个选项,则不需要该行。
    • 即使有超过 5 个选项,CASE 语句也会处理:)
    【解决方案2】:

    您需要做的是创建一个连接所有表并仅将您需要的列返回到一个表中的选择语句。试试这样的:

    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)
    

    等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 2022-10-25
      • 2015-02-10
      相关资源
      最近更新 更多