2016-12-02 9 views
1

考えるとテーブルCollegeMajorsSQL Serverの:いくつかの条件

| Id | Major  | 
|----|-------------| 
| 1 | Accounting | 
| 2 | Math  | 
| 3 | Engineering | 

EnrolledStudents

| Id | CollegeMajorId | Name   | HasGraduated | 
|----|----------------|-----------------|--------------| 
| 1 | 1    | Grace Smith  | 1   | 
| 2 | 1    | Tony Fabio  | 0   | 
| 3 | 1    | Michael Ross | 1   | 
| 4 | 3    | Fletcher Thomas | 1   | 
| 5 | 2    | Dwayne Johnson | 0   | 

は私が

Select 
    CollegeMajors.Major, 
    Count(select number of students who have graduated) AS TotalGraduated, 
    Count(select number of students who have not graduated) AS TotalNotGraduated 
From 
    CollegeMajors 
Inner Join 
    EnrolledStudents On EnrolledStudents.CollegeMajorId = CollegeMajors.Id 
のようなクエリをしたい、関連テーブルの列のカウントを()を取得

と私はこれらの結果を期待しています

| Major  | TotalGraduated | TotalNotGraduated | 
|-------------|----------------|-------------------| 
| Accounting | 2    | 1     | 
| Math  | 0    | 1     | 
| Engineering | 1    | 0     | 

したがって、質問はどのような質問が上記を達成するためにCOUNTの内部に入るのですか?

答えて

2
Select CollegeMajors.Major 
    , COUNT(CASE WHEN EnrolledStudents.HasGraduated= 0 then 1 ELSE NULL END) as "TotalNotGraduated", 
    COUNT(CASE WHEN EnrolledStudents.HasGraduated = 1 then 1 ELSE NULL END) as "TotalGraduated" 
From CollegeMajors 
InnerJoin EnrolledStudents On EnrolledStudents.CollegeMajorId = CollegeMajors.Id 
GROUP BY CollegeMajors.Major 
1

あなたは希望result.Pleaseは、以下の更新クエリを試す達成するために、あなたのCOUNTCASEステートメントを使用することができます。

Select CollegeMajors.Major 
    , COUNT(CASE WHEN EnrolledStudents.HasGraduated= 0 then 1 ELSE NULL END) as "TotalNotGraduated", 
    COUNT(CASE WHEN EnrolledStudents.HasGraduated = 1 then 1 ELSE NULL END) as "TotalGraduated" 
From CollegeMajors 
InnerJoin EnrolledStudents On EnrolledStudents.CollegeMajorId = CollegeMajors.Id 
GROUP BY CollegeMajors.Major 
+0

Select Count(*) From EnrolledStudents group by CollegeMajorId having HasGraduated = 1 

そして卒業していないもののためにゼロに1を変更私は実際にあなたのクエリを実行しようとしなかった、私はちょうどCASE文を使用して条件でカウントを計算する方法であなたのコードを再掲載しました。あなたはメインのクエリでgroup byを持つ必要があり、count文だけを私の答えとみなすことができます。 –

+0

はい、私はあなたに同意します、私はちょうど彼の質問に基づいてカウントセクションを投稿した、後で私はちょうど彼の他の部分を確認せずにクエリ全体を更新しました。あなたの提案によると、私は今、グループでクエリを更新しました。 –

0

あなたは卒業し、カウントのためにこれを試すことができます:いいえ、あなたがして、グループを持っている必要があり

Select Count(*) From EnrolledStudents group by CollegeMajorId having HasGraduated = 0