向复杂SQL查询添加计数
我有以下查询,返回测试问题、这些问题的可能答案以及用户选择每个可能答案的次数:向复杂SQL查询添加计数,sql,sql-server-2005,Sql,Sql Server 2005,我有以下查询,返回测试问题、这些问题的可能答案以及用户选择每个可能答案的次数: 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_t
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
如果我正确理解了您的模型,只需添加以下内容,您就可以了解问题的回答次数:
LEFT OUTER JOIN (
SELECT ra.question_id, COUNT(*) AS TotalAnswers
FROM dbo.form_response_answers ra
GROUP BY ra.question_id
) G2
然后就像你和G一样加入,得到完整的答案。
这很简单。。。所以我很有可能遗漏了什么:)这看起来应该有用。。。你得到了什么样的结果?是的,结果看起来不错。我只是在计算一个问题被回答的总次数时遇到了麻烦。它已经在计算一个特定回答被选择的次数,我需要计算每个问题被回答的次数。因此,基本上我需要对每个问题的回答数量求和。我在我的原始帖子中添加了一个问题的结果集,以更好地说明我正在尝试做什么。我需要对最后一列中的值求和,但只针对那个特定的问题。当然,最终结果集中会有很多问题。在派生表中
ra.question\u option\u id
的目的是什么?我在这里是在暗中拍摄,但是如果你从select和grouping语句中删除ra.question\u option\u id
,它应该会告诉你问题被回答的次数,对吗?我希望你不介意我也重新格式化了你的结果集。