2012-04-10 2 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

내가 뭘하려고하는지 더 잘 설명하기 위해 원래 게시물에 한 가지 질문에 대한 결과 집합을 추가했습니다. 마지막 열의 값을 합산해야하지만 그 특정 질문에 대해서만 합산해야합니다. 물론 최종 결과 집합에는 많은 질문이있을 것입니다. – 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