2014-09-05 2 views
1

나는 질문들 사이의 관계와 함께 동적으로 설문지를 작성 중이다.SQL Server 쿼리에서 필드 값을 조건으로 사용하는 방법은 무엇입니까?

다른 질문의 대답에 따라 하나의 질문을 표시하거나 숨길 수 있다는 의미입니다.

질문 용으로 2 개, 관계 배송용으로 2 개의 테이블을 만들었습니다.

지금의 관계 테이블에이 같은 값을 가질 :

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

질문 (35)는 2 개 옵션도하고 그렇습니다 있습니다. 이제 사용자가 예를 선택하면 질문 45가 표시되고 46은 숨겨 져야하고 사용자가 아니오를 선택하면 질문 46이 표시되고 45가 숨겨 져야합니다.

사용자가 질문 10보다 크거나 같음을 선택하면 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 + 피연산자 + 대답] 피연산자 필드 값을 기반으로 동적을해야

누구든지이 일을 도와 주시겠습니까?

답변

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) 
    ); 
+0

감사 고든하지만, 피연산자가 고정되어 있지 않습니다. 피연산자를 사용하고 조건으로 대답해야합니다. – Mausami

+0

@Mausami. . . 모든 가능한 피연산자를 포함하도록'where'를 확장하십시오. –

+0

고든 고맙습니다. 그것은 나에게 도움이 될 것입니다. 고마워. .. – Mausami