如何在sql server查询中使用字段值作为条件?

时间:2014-09-05 00:47:20

标签: php sql sql-server sqlcommand

我正在用问题之间的关系动态创建调查问卷。

这意味着应该显示或隐藏一个问题取决于另一个问题的答案。

我创建了两个表格用于问题,一个表格用于关系船舶。

现在在关系表中我有这样的值:

ParentQuesId         ChildQuesId         Operand         Answer
    35                   45                =              yes
    35                   46                =              no   
    37                   52               >=              10

问题35有2个选项是和否。现在当用户选择是时,则应显示问题45,并且应隐藏46,当用户选择否时,应显示问题46并隐藏45。

当用户选择答案大于或等于10问题52时,

和问题37相同。

现在我根据ParentQuesId和用户的回答进行sql查询。

但我不知道如何根据操作数,答案和用户答案的​​价值制定条件。

到目前为止我所尝试的内容如下:

 declare @sql nvarchar(255)
 declare @parent int = 35
 declare @userans nvarchar(100) = 'yes'
 set @sql = 'select * from QuesRelations where ParentQuesId = '+ cast(@parent as nvarchar(50)) +' and '''+ cast(@userans as nvarchar(50)) +''' = Answer';
 exec(@sql)

但我需要制作第二个条件[即@userans + Operand + Answer]动态,它基于操作数字段值

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

我建议您像常规SQL一样执行此操作:

select *
from QuesRelations
where ParentQuesId = @parent and
      ((operand = '=' and @answer = answer) or
       (operand = '>=' and @answer >= answer)
      );

您当然可以扩展where以处理其他操作数,例如:

select *
from QuesRelations
where ParentQuesId = @parent and
      ((operand = '=' and @answer = answer) or
       (operand = '>=' and @answer >= answer)
       (operand = '>' and @answer > answer)
       (operand = '<=' and @answer <= answer)
       (operand = '<' and @answer < answer)
      );