Как применить условие множественного объединения в T-SQL и не дать этим условиям по отдельности повлиять на результат - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть две таблицы Вопрос и Ответы.В таблице вопросов есть столбец QuestionType, и его значение равно 1, если вопрос имеет текстовый тип, и 2, если вопрос имеет предварительно определенные параметры ответа, например, радио, раскрывающийся список

Я пытаюсь использовать T-SQL, где янужны только ответы на вопрос, если ответ имеет значение.Теперь для QuestionType, если значение равно нулю или пусто, то это означает, что нет ответа, который будет заполнен, но для QuestionType 2 он всегда будет нулевым, даже если есть ответ, потому что есть другая таблица, содержащая эту информацию.

Мне нужен ответ там, где есть значение, но также вопрос типа 2, даже с нулевым значением в ответе

я сделал следующее, но правило условия из вопроса типа 2, которое мне не нужно

FROM [dbo].[MyTable] AS sur
INNER JOIN [dbo].[SurveyQuestions] AS surQus ON sur.Id = surQus.SurveyId
INNER JOIN [dbo].[Questions] AS qus ON surQus.QuestionId = qus.Id
LEFT JOIN [dbo].[Responses] AS res ON res.SurveyId = sur.Id
LEFT JOIN [dbo].[Answers] AS ans ON res.Id = ans.ResponseId AND qus.Id = ans.QuestionId 
LEFT JOIN [dbo].[AnswerOptions] AS ansOpt ON ans.Id = ansOpt.AnswerId
LEFT JOIN [dbo].[QuestionOptions] AS qusOpt ON ansOpt.QuestionOptionId = qusOpt.Id
 WHERE con.Id = '00000011-0013-4D34-8888-7E7189CA348U'
    AND (qus.QuestionType ='1' AND ans.Value IS NOT NULL ) //???????? NEED HELP HERE

1 Ответ

0 голосов
/ 21 декабря 2018

Если я понимаю ваш вопрос, вам нужен оператор ИЛИ, каждый набор условий в своем наборе скобок, заключенный в один основной набор скобок.

FROM [dbo].[MyTable] AS sur
INNER JOIN [dbo].[SurveyQuestions] AS surQus ON sur.Id = surQus.SurveyId
INNER JOIN [dbo].[Questions] AS qus ON surQus.QuestionId = qus.Id
LEFT JOIN [dbo].[Responses] AS res ON res.SurveyId = sur.Id
LEFT JOIN [dbo].[Answers] AS ans ON res.Id = ans.ResponseId AND qus.Id = ans.QuestionId 
LEFT JOIN [dbo].[AnswerOptions] AS ansOpt ON ans.Id = ansOpt.AnswerId
LEFT JOIN [dbo].[QuestionOptions] AS qusOpt ON ansOpt.QuestionOptionId = qusOpt.Id
 WHERE con.Id = '00000011-0013-4D34-8888-7E7189CA348U'
    AND (
        (qus.QuestionType ='1' AND ans.Value IS NOT NULL )
        OR
        (qus.QuestionType ='2')
        )
...