2016-05-27 4 views
1

私は、さまざまな学校の学生の詳細を示すMySQLテーブルを持っています(下記参照)。 SchoolNameはユニークな学校を定義しています。同様に、StudentNameStudentIdは一緒に一意に学生を定義します。SELECTクエリでcountを使用して複数のテーブルからビューを作成するにはどうすればよいですか?

| SchoolName | StudentName | StudentId | 

| ABC  | Tom   | 147852 | 
| ABC  | Nix   | 258963 | 
| ABC  | Bob   | 898596 | 
| XYZ  | Ross  | 369369 | 
| XYZ  | Jimmy  | 147852 | 

私は別のテーブルを持っています。これは、学生が受講したコースを示しています(下記参照)。ここで、文字「X」は、そのコースを受講したことを意味する。空白は、彼がそのコースを取っていないことを意味します。生徒はの1つのコースしか受けられないとします。

| StudentName | StudentId | StudiesPhysics | StudiesMaths | StudiesChemistry | 

| Tom   | 147852 |    | X   |     | 
| Nix   | 258963 | X   |    |     | 
| Bob   | 898596 |    | X   |     | 
| Ross  | 369369 |    |    | X    | 
| Jimmy  | 147852 | X    |    |     | 

各学校の各コースを勉強している学生の数を示すビューが必要です(下の例を参照)。この希望の結果を得るためにMySqlクエリを書いてください。

| SchoolName | CountPhysics | CountMaths | CountChemistry | 

| ABC  | 1   | 2   | 0    | 
| XYZ  | 1   | 0   | 1    | 
+0

ことにより、簡単なカウントおよびグループを使用しませんか? – jarlh

答えて

4
SELECT 
SN.SchoolName, 
SUM(CASE WHEN C.StudiesPhysics='X' THEN 1 ELSE 0 END) AS CountPhysics, 
SUM(CASE WHEN C.StudiesMaths='X' THEN 1 ELSE 0 END) AS CountMaths, 
SUM(CASE WHEN C.StudiesChemistry='X' THEN 1 ELSE 0 END) AS CountChemistry 
FROM SchoolName AS SN 
LEFT JOIN Course AS C 
ON SN.StudentId=C.StudentID 
GROUP BY SN.SchoolName 
+0

おっと、申し訳ありません。私は今それを追加しました。 – Sandesh

0

StudentId年代平均は固有のものではないことを、「StudentNameとStudentIdが一緒に一意に学生を定義する」あなたが言う

DECLARE @Table1 TABLE 
    (SchoolName varchar(3), StudentName varchar(5), StudentId int) 
; 

INSERT INTO @Table1 
    (SchoolName , StudentName , StudentId) 
VALUES 
    ('ABC', 'Tom', 147852), 
    ('ABC', 'Nix', 258963), 
    ('ABC', 'Bob', 898596), 
    ('XYZ', 'Ross', 369369), 
    ('XYZ', 'Jimmy', 147852) 
; 




DECLARE @Table2 TABLE 
    (Name VARCHAR(10) , Id INT , Physics VARCHAR(10), Maths VARCHAR(10), Chemistry VARCHAR(10)) 
; 

INSERT INTO @Table2 
    (Name , Id , Physics , Maths , Chemistry) 
VALUES 
    ('Tom',147852,NULL,'X',NULL), 
    ('Nix',258963,'X',NULL,NULL), 
    ('Bob',898596,NULL,'X',NULL), 
    ('Ross',369369,NULL,NULL,'X'), 
    ('Jimmy',147852,'X',NULL,NULL) 


    select T.SchoolName, 
    COUNT(TT.Physics)Physics, 
    COUNT(TT.Maths)Maths, 
    COUNT(TT.Chemistry)Chemistry from @Table1 T 
    INNER JOIN @Table2 TT 
    ON T.StudentId = TT.Id AND TT.Name = T.StudentName 
    GROUP BY T.SchoolName 
関連する問題