2011-12-20 8 views
0

このクエリを作成するのに何時間も掛かっています。列内のIDが他の列のIDと等しいかどうかを確認するSQL Serverクエリ

SpecialtyChosenID StudentID Subject SubjectSpecialtyID 
5ABFB416-8137   15  Math   A1EBF3CB-E899 
5ABFB416-8137   15  English  A1EBF3CB-E899 

その中に情報が意味idを持つ学生のことがない: これは、テーブルStudents(内部結合で作られた)です。 15は、彼が経過した2つの科目(数学・英語)が渡された被験者が選ばれた専門に属しているかどうかを知るために、クエリになり何のid A1EBF3CB-E899

を専門に属しID 5ABFB416-8137

で専門を選択しました学生による?

SubjectSpecialtyIDと同じ件名を数えて、SpecialtyChosenIDとすることもできます。

どうもありがとう

+3

これは、CSコースの4NF/5NFデータベースの問題を示すために使用された例のように思われます。これが宿題であれば、そのようにマークしてください。 – ConcernedOfTunbridgeWells

+0

いいえ、それは宿題ではなく、学生や科目は私が車や本を選ぶことができる例です。さらにCSコースが何であるか分かりません。 – user974417

答えて

0

ような何かを行うことができSpecialtyChosenIDを持っている場合。これにより、学生が選択した専門分野に合った科目の数が検索されます。

SELECT l.SpecialtyChosenID, l.StudentID, Count(Distinct r.Subject) FROM Students l 
LEFT JOIN Students r ON (l.StudentID=r.StudentID AND l.SpecialityChosenID=r.SubjectSpecialityID) 
GROUP BY l.SpecialtyChosenID, l.StudentID 

ただし、これは与えられたテーブル構造を使用すると非常に非効率的です。専門分野の学生がリストされているテーブルと、科目と専門分野がある別のデータベースがある場合、派生データからではなく、基本データからこのクエリを作成する方がよいでしょう。

+0

ありがとう、それは私に影響を与えた! – user974417

0
SELECT * FROM Students WHERE SpecialtyChosenID = SubjectSpecialtyID 
0

あなただけ一致するサブジェクトのリストを必要とし、あなたはあなたが参加し、自己を行うことができます

SELECT * FROM Students 
WHERE SubjectSpecialtyID = SpecialityChosenID 
0
CASE WHEN SpecialtyChosenID = SubjectSpecialtyID THEN 1 ELSE 0 END AS specialty 
関連する問題