比较SQL Server C#Windows应用程序中两个表中的两个类似列

比较SQL Server C#Windows应用程序中两个表中的两个类似列,c#,sql,sql-server,ado.net,C#,Sql,Sql Server,Ado.net,我正在开发一个有多种选择的测验应用程序 我有两张桌子 问题-它有一个名为CorrectAnswer的列 UserQuestions-它有一个名为SelectedAnswer的列 我想检查第一个表中的正确答案是否等于第二个表中的SelectedAnswer,这两个表都有userId和QuestionText列 这是为了计算分数。 我期望的输出是比较后的数字 到目前为止,我尝试实现的解决方案是查询两个表 SELECT UserId, QuestionText, CorrectAnswer FRO

我正在开发一个有多种选择的测验应用程序

我有两张桌子

  • 问题-它有一个名为CorrectAnswer的列

  • UserQuestions-它有一个名为SelectedAnswer的列

  • 我想检查第一个表中的正确答案是否等于第二个表中的SelectedAnswer,这两个表都有userId和QuestionText列

    这是为了计算分数。 我期望的输出是比较后的数字

    到目前为止,我尝试实现的解决方案是查询两个表

    SELECT UserId, QuestionText, CorrectAnswer FROM Questions
    
    将所有值保存在字典数组中,然后尝试比较它们,如果它们相等,则设置计数变量,然后保存分数


    我希望有更好的方法。

    您可以使用连接和条件聚合计算每个用户的分数:

    select uq.userid, 
        avg(case when uq.selectedanswer = q.correctanswer then 1.0 else 0 end) as ratio
    from userquestions uq
    inner join questions q 
        on  q.questiontext = ua.questiontext
        and q.userid = uq.userid
    

    这将为您提供每个用户正确答案的比率,即
    0
    1
    之间的数字。如果您想要正确答案的计数,那么您只需
    sum()

    内部联接和计数?请提供示例数据和所需结果。如何处理不回答问题的用户?
    select uq.userid, 
        avg(case when uq.selectedanswer = q.correctanswer then 1.0 else 0 end) as ratio
    from userquestions uq
    inner join questions q 
        on  q.questiontext = ua.questiontext
        and q.userid = uq.userid