2012-04-10 10 views
4

I持って試験問題、これらの質問に対する可能な回答や、各可能な答えがユーザによって選択された回数を返す次のクエリ:複雑なSQLクエリに数を追加する

SELECT p.program_id, 
     p.pre_survey_form_id, 
     p.post_survey_form_id, 
     fq.form_id, 
     sq.question_id, 
     sq.question_text, 
     qo.question_option_id, 
     qo.option_text, 
     G.Total 

FROM dbo.program p 
     LEFT OUTER JOIN dbo.form_question fq 
      ON p.pre_survey_form_id = fq.form_id OR p.post_survey_form_id = fq.form_id 
     LEFT OUTER JOIN dbo.survey_question sq 
      ON fq.question_id = sq.question_id 
     LEFT OUTER JOIN dbo.question_option qo 
      ON sq.question_id = qo.question_id 
     LEFT OUTER JOIN (
      SELECT ra.question_id, ra.question_option_id, COUNT(*) AS Total 
      FROM dbo.form_response_answers ra 
      GROUP BY ra.question_option_id, ra.question_id 
     ) G 
      ON G.question_id = sq.question_id AND G.question_option_id = qo.question_option_id 

ORDER BY p.program_id, fq.form_id, sq.question_id, qo.question_option_id 

唯一の事を私は各質問に対する回答の数を合計する必要がありますが、私は本当にこの問題に悩まされています。私は、応答の数を数え、特定の応答がユーザーによって選択された時間の割合を取得します。

結果セット:

---- ---- ---- -- --------------------------------------------------------------------------- - ------------ ---- 
1000 1001 1000 10 How many days a week do you drink at least eight glasses (64 oz.) of water? 1 Never   1 
1000 1001 1000 10 How many days a week do you drink at least eight glasses (64 oz.) of water? 2 Once   1 
1000 1001 1000 10 How many days a week do you drink at least eight glasses (64 oz.) of water? 3 Two times  NULL 
1000 1001 1000 10 How many days a week do you drink at least eight glasses (64 oz.) of water? 4 Three times 2 
1000 1001 1000 10 How many days a week do you drink at least eight glasses (64 oz.) of water? 5 Four times NULL 
1000 1001 1000 10 How many days a week do you drink at least eight glasses (64 oz.) of water? 6 Five or more NULL 
+0

これはうまくいくように見えます。どのような結果が得られていますか? –

+0

はい、結果は良好です。私はちょうど質問に答えた総数を数えられる数を加えることに問題があります。すでに特定の回答が選択された回数を数えているので、各質問に回答した回数を数える必要があります。だから基本的に私は各質問に対する回答の数を合計する必要があります。 – Darren

+0

私は何をしようとしているかをよりよく説明するために、元の投稿に1つの質問の結果セットを追加しました。最後の列の値をSUMにする必要がありますが、その特定の質問に対してのみです。もちろん、最終結果セットには多くの質問があります。 – Darren

答えて

5

私が正しくあなたのモデルを理解していれば、ちょうどこれを追加すると、質問がanwseredたあなたの回数を取得する必要があります:あなたがやったように

LEFT OUTER JOIN (
      SELECT ra.question_id, COUNT(*) AS TotalAnswers 
      FROM dbo.form_response_answers ra 
      GROUP BY ra.question_id 
     ) G2 

は、ただ参加GとTotalAnswersを取得します。 これはかなりシンプルなので、何かが欠けている可能性が高いです:)

+0

ありがとうございました。 – Darren