在 SO here上得到一个无用的答案后,我的问题就消失了
我需要对其进行优化,因为它会经常被调用。它正在进入一个存储过程。
I am given @slide (tblILDSlide.id) and @sessionid (tblILDSession.id)
我需要我的结果看起来像这样:
--lets say students had answered a(3),b(10),c(0),d(5) in a survey (test)
|Answer Counts
0|3
1|10
2|0 --this needs to show as a zero and not be skipped
3|5
由于每个问题都有不同数量的可能答案,因此我需要从此处的 QID 的 @@rowcount of Choice 播种行:
**dbo.tblSurveyAnswerChoice
QID (int, not null)
Sequence (int, null)
Choice (nvarchar(100), null) --this column will vary and is for choices
--like true/false, Yes, No, Red Blue,
--or even Completely Agree,Somewhat Agree...,Completely Disagree
要获得 QID,我必须使用 @slide 和:
**dbo.tblILDSlide
id (PK, int, not null)
slide_type(FK, int, not null)
question_id(FK, int, null)
media_url(nvarchar(100), null)
我需要为每个选择排一行(没有响应的选择为零)。回复保存在这里:
--there can be more than one response per question
--like for multiple-multiple choice (check all that apply)
**dbo.tblResponses
response_id(FK, int, not null)
answer_sequence (int, null) --accepts 1,2,3 etc for choice
other (nvarchar(50), null) --for text answers
要获得它们,我必须使用 response_id,我可以在此处使用 @sessionid 和 @slide 获得它:
**dbo.tblSlideResponseInfo
id (PK, int, not null)
user_id(nvarchar(50), not null)
slide_id (FK, int, not null)
response_date (datetime, not null)
session_id (FK, int, not null)
从 stackoverflow 上的帖子复制: 我的问题是,当有一个可能的选择但没有答案时,我就数不清了。所以我知道我需要抓住可用的可能选择 [在另一个表中......] 我想我需要为 tblSurveyAnswerChoices 中存在的每个答案返回一个空白行然后以某种方式加入其他计数,但是我想不通。
(从 StackOverflow 上的同一个问题复制我自己的答案)
您的帖子已经包含一个很好的答案:“我想我需要为 tblSurveyAnswerChoices 中存在的每个答案返回一个空白行,然后以某种方式将其他计数加入其中。”
这是一种方法:
使用
left join
确保将列出第一个表中的任何选择。默认情况下,左连接将为第二个表中不存在的项目返回 NULL,但ifnull
允许您将 NULL 替换为 0。注意:
ifnull
在 MySQL 中应替换为isnull
在 TSQL 中