В рамках нашего текущего проекта анкетирования опроса приведенный ниже код используется для определения общего количества вопросов для опроса, количества правильных ответов и процент правильных ответов.Как вычислить значения checkboxlist?
У меня есть проблема с вычислением значений checkboxlist.
Опрос выполнен в виде переключателей и значений флажков.
С выбором радиокнопки выбран только один выбор.
Но для checkboxlist может быть более 1 значения.
Это затрудняет вычисление значений checkboxlist.
Мое мышление вычислить Флажок значения следующим образом:
-- plus 1 for each correct answer
-- minus 1 for each wrong answer
-- total from that then divided by the number of correct answers to the question
Я просто не знаю, как идти о кодировании это.
Ниже приведен код, который выполняет почти все перечисленные выше, за исключением значений флажков.
Большое спасибо.
SELECT question, choice, CorrectAnswer, TotalAnswers, CorrectAnswers,
(CorrectAnswers * 100)/TotalAnswers AS totalPercent,
convert(varchar, (CorrectAnswers * 100)/TotalAnswers) + '%' AS totalPercentStr
FROM (
SELECT sq.questionid, sq.question, sc.choice, sq.CorrectAnswer,
COUNT(sq.questionId) OVER (PARTITION BY sq.SurveyId) AS TotalAnswers,
COUNT(CASE WHEN sa.choiceid IS NOT NULL AND sc.choice = sq.CorrectAnswer THEN 1 ELSE NULL END) OVER (PARTITION BY sq.SurveyId) AS CorrectAnswers
FROM Survey s
INNER JOIN SurveyQuestions AS sq ON s.surveyId = sq.SurveyId
INNER JOIN SurveyChoices AS sc ON sq.questionId = sc.questionId
LEFT JOIN SurveyAnswers AS sa ON sc.choiceId = sa.choiceId AND sa.username = @UserName
WHERE s.surveyId = @SurveyId
AND (sa.username IS NOT NULL
OR
(sa.username IS NULL AND sc.choice = sq.CorrectAnswer))
) AS derived
ORDER BY questionId;
CREATE TABLE [dbo].[Survey]( [SurveyID] [int] IDENTITY(1,1) NOT NULL, [Title] [varchar](50) NULL, [Description] [varchar](max) NULL CREATE TABLE [dbo].[SurveyQuestions]( [QuestionID] [int] IDENTITY(1,1) NOT NULL, [SurveyID] [int] NULL, [Question] [varchar](255) NULL, [AnswerType] [char](1) NULL, [CorrectAnswer] [nvarchar](255) NULL, [QuestionOrder] [int] NULL CREATE TABLE [dbo].[SurveyChoices]( [ChoiceID] [int] IDENTITY(1,1) NOT NULL, [QuestionID] [int] NOT NULL, [Choice] [nvarchar](255) NOT NULL CREATE TABLE [dbo].[SurveyAnswers]( [AnswerID] [int] IDENTITY(1,1) NOT NULL, [QuestionID] [int] NOT NULL, [ChoiceID] [int] NULL, [ChoiceText] [varchar](max) NULL, [UserName] [varchar](50) NULL
Можете ли вы опубликовать структуры таблиц? –
@ mr.Reband, я обновил вопрос выше с помощью табличных структур. Спасибо за ваш ответ. По какой-то причине таблицы сгруппированы вместе. –
В случае checkboxlist, как может 'CorrectAnswer' хранить несколько ответов? Похоже, что должна быть дополнительная таблица, называемая «CorrectAnswers» или что-то еще, со структурой, подобной «SurveyAnswers». –