2012-04-10 9 views
4

Ich habe die folgende Abfrage, die Testfragen, mögliche Antworten auf diese Fragen und die Anzahl der Male jede mögliche Antwort durch den Benutzer ausgewählt wurde zurückgibt:Hinzufügen einer Zählung zu einer komplexen SQL-Abfrage

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 

Das einzige, was Ich muss die Anzahl der Antworten auf jede Frage zusammenfassen, aber ich stolpere wirklich damit. Ich zähle die Anzahl der Antworten und erhalte den Prozentsatz der Zeiten, zu denen eine bestimmte Antwort vom Benutzer gewählt wurde.

Ergebnis Satz:

---- ---- ---- -- --------------------------------------------------------------------------- - ------------ ---- 
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

Das sieht aus wie es sollte funktionieren ... welche Art von Ergebnissen erhalten Sie? –

+0

Ja, die Ergebnisse sehen gut aus. Ich habe nur Schwierigkeiten, eine Zählung hinzuzufügen, die die Gesamtzahl der Antworten auf eine Frage zählt. Es zählt bereits, wie oft eine bestimmte Antwort gewählt wurde. Ich muss zählen, wie oft jede Frage beantwortet wurde. Also muss ich im Grunde die Anzahl der Antworten auf jede Frage zusammenfassen. – Darren

+0

Ich habe das Ergebnis für eine Frage in meinem ursprünglichen Beitrag hinzugefügt, um besser zu veranschaulichen, was ich versuche zu tun. Ich muss die Werte in der letzten Spalte SUMMEN, aber nur für diese bestimmte Frage. Natürlich wird es im endgültigen Ergebnis viele Fragen geben. – Darren

Antwort

5

Wenn ich Ihr Modell richtig verstanden habe, gerade diese Zugabe sollten Sie die Anzahl, wie oft eine Frage anwsered wurde erhalten:

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

dann nur beitreten, wie Sie mit tat G und bekomme TotalAnswers. Es ist ziemlich einfach ... so gibt es eine gute Chance, dass ich etwas vermisse :)

+0

Vielen Dank für die Antwort. – Darren

Verwandte Themen