如何在T-SQL中应用多个合并条件,而又不让这些条件单独影响结果

时间:2018-12-21 15:50:24

标签: sql sql-server sql-server-2012

我有两个表“问答”。问题表的列为“ QuestionType”,如果问题的类型为文本,则其值为1;如果问题具有预定义的答案选项(例如,单选,下拉菜单),则值为2。

我正在尝试使用T-SQL,如果答案有价值,我只需要针对问题回答。现在,对于QuestionType,如果value为null或为空,则意味着没有答案将被填满,但对于QuestionType 2,即使存在答案,它也将始终为null,因为存在另一个包含该信息的表。

我需要存在值的Answer,即使在Answer中为Null值,也需要questionType为2

我这样做了,但条件排除了我不想要的QuestionType 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 :(得分:1)

如果我理解您的问题,则需要一个OR语句,每组条件都在各自的括号中,并由一组主要的括号包围。

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