2012-02-25 4 views
1

たとえば、これは回答がすでに異なる学生のデータベースに読み込まれているクイズです。さまざまな生徒の答えを含む様々な生徒の記入項目があるテーブルの中には、正解のすべてを含む行「手書き記入」があります。vb.netを使用して「マスタレコード」に対してSQLテーブルのすべての行を比較するにはどうすればよいですか?

私がしたいのは、クリック時にマスター行をプルし、他のすべての行と比較するボタンをコードすることです。最初の行から始めて、列がマスター項目と一致するたびに、1ポイントが宣言された整数に割り当てられます。行が完全に読み取られると、整数は "totalpoints"列に格納されます。次に、次の回答の行に移動します。

私はこれに言い方を変えたいと思っています。もし簡単な方法があれば、私は提案をすることができます。 SQLデータベースへの接続を確立するための助けは本当に必要ありません。どんな助けも大変ありがとうございます。事前に誰にでも感謝します。私はそれが役に立つとすればもっと詳細を提供することができます。

+0

スキーマを少し良くすることはできますか?テーブルの列とは何ですか?そのデータ型は何ですか?マスター行の例を表示することができますか(生徒がここで覗き見して、答えの詳細を事前に見てみましょう:-))、回答行の例をいくつか表示できますか? –

+0

私は助けてくれてありがとう、私はこれでかなり新しいし、実際にストアドプロシージャのルートを行ったことはありません。列は基本的にanswer1、answer2、answer3など65までです。テーブルは単に "quiz1"です。回答のデータ型はすべて、nvarchar50とallownullsで、プライマリキー(その名前)は例外です。マスター行はサブミットされた回答と同じ表内にあり、主キー「名前」列が「マスターリスト」である点が異なります。たぶん私は別のテーブルに格納する必要がありますか? – BradtotheBone

+0

同じテーブルに問題はないようですが、答えが 'nvarchar(50)'であれば、それは私にはちょっと危険です。クイズの答えは「メアリーは小さな子羊がいる」と答えることができます。学生の答えは「メリーは少しの子羊を持っていました」と答えることができますか?例えば。スペルを無視する必要がありますか?ファジー検索は問題になります。このアプローチは、複数選択、真/偽、数値回答に適しています。 –

答えて

1

スキーマのあいまいな考え方に基づいた大雑把な推測です。あなただけ...あなたが本当にクライアントにデータのすべてを引いた後、ループすることにより、効率的に少ないことをしたい場合を除き(@QuizIDに渡し、好ましくはストアドプロシージャに格納されている).NETからこのクエリを呼ぶだろう

;WITH master AS (SELECT a1 = Answer1, a2 = Answer2, ... 
    FROM dbo.Quiz 
    WHERE QuizID = @QuizID 
    AND Answer = 'masterentry' 
) 
SELECT a.StudentID, 
    Score = CASE WHEN a.Answer1 = master.a1 THEN 1 ELSE 0 END 
      + CASE WHEN a.Answer2 = master.a2 THEN 1 ELSE 0 END 
      + ... 
FROM dbo.Quiz AS a 
CROSS JOIN master 
WHERE a.QuizID = @QuizID 
AND a.Answer <> 'masterentry' -- or a.StudentID IS NOT NULL? 

ここでは、データタイプに基づいていくつかのショートカットが存在する場合があります。例えば。クイズが真/偽の場合は、...の部分を減らすためにいくつかの小さなトリックがあります。

+0

私はこれを答えとしてマークするのを忘れました。それは有り難いです。 – BradtotheBone

関連する問題