Sql 对于其他两个问题,如何将选择(无)答案的人排除在统计之外?

Sql 对于其他两个问题,如何将选择(无)答案的人排除在统计之外?,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有以下数据库设计: Answers Table: AnswerID, Answer QuestionAnswers Table: ID, QuestionID, AnswerID CompleteSurvey Table: ID, QuestionAnswersID, RespondantID Questions Table: QuestionID, Question Employee Table: EmployeeID, Name 在其中一个问题中,我有以下答案: ER Estimate

我有以下数据库设计:

Answers Table: AnswerID, Answer
QuestionAnswers Table: ID, QuestionID, AnswerID
CompleteSurvey Table: ID, QuestionAnswersID, RespondantID
Questions Table: QuestionID, Question
Employee Table: EmployeeID, Name
在其中一个问题中,我有以下答案:

ER Estimate
Company Esitmate
Both ER & Company Estimates
None
这个问题的答案将影响两个问题。我现在想要的是,排除选择“无”的员工,然后从其他两个问题的参与者人数中排除他们。那怎么做呢? 让我们假设我们有三个问题,分别是A、B和C。那么,我如何才能从参与问题B和C的员工人数中排除选择“无”作为问题A答案的人

我写的查询显示了每个问题的每个可能答案中的参与者人数,它运行良好,但我如何改进它以获得我想要的上述内容:

SELECT     COUNT(DISTINCT dbo.CompleteSurvey.RespondantID) AS [Total Number of Participants], dbo.Answers.Answer, dbo.Questions.Question
FROM         dbo.Questions INNER JOIN
                      dbo.QuestionsAnswers ON dbo.Questions.QuestionID = dbo.QuestionsAnswers.QuestionID INNER JOIN
                      dbo.Answers ON dbo.QuestionsAnswers.AnswerID = dbo.Answers.AnswerID LEFT OUTER JOIN
                      dbo.CompleteSurvey ON dbo.QuestionsAnswers.ID = dbo.CompleteSurvey.QuestionsAnswersID
GROUP BY dbo.Answers.Answer, dbo.Questions.Question
更新2:

问题A的每个可能答案中的参与者人数。现在,对于问题B,让我们假设我们有以下答案和参与者人数:

22    Answer A
180   Answer B
180   Answer C
20    Answer D

当我应用you query将问题A中没有答案的人排除在以下问题之外时,问题B中所有答案的数字都是否定的。这是怎么回事?

也许这可能会起作用:

SELECT c.Answer, a.Question, COUNT(DISTINCT d.RespondantID) AS totalcount
FROM Questions a
INNER JOIN QuestionAnswers b ON a.QuestionID = b.QuestionID
INNER JOIN Answers c ON b.AnswerID = c.AnswerID
LEFT JOIN CompleteSurvey d ON b.ID = d.QuestionAnswersID
LEFT JOIN
(
    SELECT DISTINCT RespondantID
    FROM CompleteSurvey
    WHERE QuestionAnswersID IN (<id>, <id>)
) e ON d.RespondantID = e.RespondantID
WHERE e.RespondantID IS NULL
GROUP BY c.Answer, a.Question

您必须事先知道要排除的问答组合的ID,并将其插入查询中所示的位置。

请您向我解释一下查询中a和b的含义好吗?因为我想用这个查询来回答不同的问题issue@TechLover这些只是表引用,它比为每个字段键入整个数据库和表名要简洁得多。所有你需要关心的是改变这个。问题是我有总数。这意味着现在你的问题;如果我有不止一个问题,请回答。如果我应用了其中的一个,然后应用了另一个,我将丢失应用第一个ID生成的结果。那么,我如何应用所有的ID来同时获得一个结果呢end@TechLover,我想你的意思是,你想排除回答多个问题-答案组合的员工。请参阅我在中使用的更新答案。还要注意,交叉联接中的计数中添加了DISTINCT,因为我们不想对员工进行多次计数。@TechLover,请参阅我修改的解决方案。这一次,我使用左连接技术来排除回答一组特定问答组合的员工。让我知道它是如何工作的。
SELECT c.Answer, a.Question, COUNT(DISTINCT d.RespondantID) AS totalcount
FROM Questions a
INNER JOIN QuestionAnswers b ON a.QuestionID = b.QuestionID
INNER JOIN Answers c ON b.AnswerID = c.AnswerID
LEFT JOIN CompleteSurvey d ON b.ID = d.QuestionAnswersID
LEFT JOIN
(
    SELECT DISTINCT RespondantID
    FROM CompleteSurvey
    WHERE QuestionAnswersID IN (<id>, <id>)
) e ON d.RespondantID = e.RespondantID
WHERE e.RespondantID IS NULL
GROUP BY c.Answer, a.Question