2017-04-15 24 views
-3

例子匹配:需要T-SQL查詢來獲取選擇題的答案,如果

Question_Answers

+------+--------+ 
    | q_id | ans_id | 
    +------+--------+ 
    | 1 |  2 | 
    | 1 |  4 | 
    | 2 |  1 | 
    | 3 |  1 | 
    | 3 |  2 | 
    | 3 |  3 | 
    +------+--------+ 

User_Submited_Answers

| q_id | sub_ans_id | 
    +------+------------+ 
    | 1 |   2 | 
    | 1 |   4 | 
    | 2 |   1 | 
    | 3 |   1 | 
    | 3 |   2 | 
    | 3 |   4 | 
    +------+------------+ 

我需要的,如果這行的T-SQL查詢匹配計數1 else 0

+0

你想在這裏輸出什麼?看來每個問題都有不止一個答案。 –

+0

它是一個多個答案的問題,每個問題一個標記,如果用戶提交的答案與問題答案匹配,那麼我應該得到沒有正確的問題用戶提交 –

+0

爲什麼用戶提交_multiple_答案的問題?你的預期產出是多少?你能回答我的問題嗎? –

回答

0
SELECT 
    t1.q_id, 
    CASE WHEN COUNT(t2.sub_ans_id) = COUNT(*) 
     THEN 1 
     ELSE 0 END AS is_correct 
FROM Question_Answers t1 
LEFT JOIN User_Submited_Answers t2 
    ON t1.q_id = t2.q_id AND 
     t1.ans_id = t2.sub_ans_id 
GROUP BY t1.q_id 
+0

不是這樣的我想得到沒有問題的用戶提交了正確的答案示例:q_id 3有3個正確的選項用戶提交了1個錯誤答案,用於此標記計數0 –

+0

出現錯誤消息156,級別15,狀態1,行6 關鍵字'as'附近的語法錯誤。 –

+0

我在'CASE'表達式中遺漏了'END',抱歉。 –

2

試試下面的代碼:

select qa.q_id,case when qa.ans_id=sqa.ans_id then 1 else 0 end as result from questionans qa 
left join subquestionans sqa 
on qa.q_id=sqa.q_id and qa.ans_id=sqa.ans_id 
0

這應該給您預期的結果爲每一個問題。

select q_id, min(Is_Correct)Is_Correct from (
select Q.q_id,case when count(A.sub_ans_id)=count(*) then 1 else 0 end as Is_Correct 
from #Q Q left join #A A on Q.q_id=A.q_id and Q.ans_id=A.sub_ans_id 
group by Q.q_id 
UNION ALL 
select A.q_id,case when count(Q.ans_id)=count(*) then 1 else 0 end as Is_Correct 
from #Q Q right join #A A on Q.q_id=A.q_id and Q.ans_id=A.sub_ans_id 
group by A.q_id) I group by q_id