0

私は次のデータベース設計を持っています:

Answers Table: AnswerID, Answer
QuestionAnswers Table: ID, QuestionID, AnswerID
CompleteSurvey Table: ID, QuestionAnswersID, RespondantID
Questions Table: QuestionID, Question
Employee Table: EmployeeID, Name

質問の1つに、次の回答があります。

ER Estimate
Company Esitmate
Both ER & Company Estimates
None

この質問の答えは2つの質問に影響します。ここで必要なのは、(なし)を選択した従業員を除外してから、他の2つの質問の参加者数から除外することです。So how to do that? A、B、Cの3つの質問があると仮定します。では、質問Bに参加した従業員の数から、質問Aの回答として(なし)を選択した人を除外するにはどうすればよいでしょうか。 C。

各質問の可能な回答ごとに参加者の数を示すクエリを作成しました。これはうまく機能しますが、上記で必要なものを取得するためにどのように改善できるかを示します。

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:

148 Both ER & Company Estimates
102 Company Estimate
22  ER Estimate  
130 None

質問Aの可能な各回答の参加者数。ここで質問Bについて、次の回答と参加者数があると仮定します。

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

次の質問から質問Aの(なし)回答のある人を除外するようにクエリを適用したところ、質問Bのすべての回答に対して負の数が得られました。どのようになりますか?

4

1 に答える 1

1

おそらくこれはうまくいくかもしれません:

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除外する質問と回答の組み合わせについて事前に知っておく必要<id>があり、クエリの記載されている場所に挿入する必要があります。

于 2012-07-11T05:35:14.023 に答える