0

私は SQL Server を初めて使用します。2 つのコースの成績間の相互関係を見つけるのを手伝ってください。

私は、「コンピュータ プログラミング」で「A」を取得し、コンピュータ入門でも「A」を取得した生徒を見つけたいと考えています。

データは次のようになります。

RollNum | CGPA | Status     | Name                              | Grade
410     | 2.6  | Completed  | Introduction to Computer Science  | A  
410     | 2.6  | Completed  | Computer Programming              | A-  
422     | 3.2  | Completed  | Introduction to Computer Science  | A 
422     | 3.2  | Completed  | Computer Programming              | A  
223     | 3.52 | Completed  | Introduction to Computer Science  | A 
223     | 3.52 | Completed  | Computer Programming              | A 
521     | 1.2  | Completed  | Introduction to Computer Science  | B+ 
521     | 1.2  | Completed  | Computer Programming              | A-
....
....  

これは私が書いているクエリです:

SELECT [RollNum],[CGPA],[Status],[Name],[FinalGrade]
 FROM db
     where Name ='Introduction to Computer Science' and FinalGrade='A' 
  and (Name='Computer Programming' and FinalGrade= 'A' )

助けてください、よろしくお願いします。

4

3 に答える 3

2

以下を使用できます。

select RollNum
from db
where [Name] in ('Introduction to Computer Science', 'Computer Programming')
  and [Grade] = 'A'
group by RollNum
having count(distinct name) = 2

これは関係分割RollNumとして知られており、両方のクラスを受講し、各クラスで を受け取った学生を返しAます。

デモで SQL Fiddle を参照してください

以外のものが必要な場合RollNumは、上記のクエリを で使用できますWHERE EXISTS

select [RollNum], [CGPA], [Status], [Name], [Grade]
from db d1
where exists (select RollNum
              from db d2
              where [Name] in ('Introduction to Computer Science', 'Computer Programming')
                and [Grade] = 'A'
                and d1.rollnum = d2.rollnum
              group by RollNum
              having count(distinct name) = 2);

デモで SQL Fiddle を参照してください

于 2013-04-03T16:04:50.620 に答える
1

SQLサーバーを使用している場合、私は使用します

Select [RollNum],[CGPA],[Status],[Name],[FinalGrade]
from db
where [Name] in ('Introduction to Computer Science', 'Computer Programming')
and [FinalGrade] = 'A'
于 2013-04-03T16:03:28.200 に答える
1
SELECT qCP.*
FROM (SELECT RollNum, CGPA, Status, Name, FinalGrade
      FROM db
      WHERE Name = 'Computer Programming' 
      AND FinalGrade = 'A') qCP
INNER JOIN 
    (SELECT RollNum 
     FROM db 
     WHERE Name = 'Introduction to Computer Science' 
     AND FinalGrade = 'A') qIntro
ON qCP.RollNum = qIntro.RollNum
于 2013-04-03T16:05:10.080 に答える