2017-04-05 6 views
0

enter image description here正確な答えを返していないことで、それは私が1カテゴリと第二の学校で、第三は、学生である3つのテーブルを持っている現在の結果SQLグループ

select cat.sms_schoolcategoryid as categoryId, 
      cat.sms_name as category , 
      count(sch.sms_name) as schoolname, 
      count(stu.accountnumber)NoofStudent 
     from Filteredsms_schoolcategory cat 
inner join Filteredsms_school sch 
     on cat.sms_schoolcategoryid=sch.sms_schoolcategoryid 
inner join FilteredAccount stu 
     on sch.sms_schoolid=stu.sms_schoolid 
    group by cat.sms_schoolcategoryid, 
      cat.sms_name 
     ; 

です。私はちょうど私がテーブルのカテゴリと学校に参加するときに私は正確な結果を返し、私は間違った結果を返す学校のテーブルと学生のテーブルに参加するときにカテゴリの代わりに学校を数えたいと思う。どうすればいいか教えてください。

+0

入力、希望出力、実際の出力を含む小さな例を作成してください。 –

+1

元のデータと、検索結果から戻ってきた結果を表示できますか? –

+2

いくつかのサンプルテーブルデータと現在の結果と予想される結果(すべてフォーマット済みテキスト)を追加します。 – jarlh

答えて

0

データモデルに関する詳細情報を提供しない限り、推測が関係します。ただし、あなたの問題は以下に根差しているようです:

生徒用テーブルに参加すると、学校カテゴリと学校(*)の組み合わせごとに追加のレコードが生成されます。つまり、あなたのsqlは学校カテゴリではなく、学生であるとみなされます。

具体的な解決方法や良いアドバイスについては、@ Nick.McDermaidのコメントを参照してください。

0

は、非NULL値の数を返すcount()これ

select count(stu.accountnumber) as NoofStudent 
     , catsch.categoryId 
     , catsch.category 
     , catsch.schoolname 
from FilteredAccount stu 
inner join (
    select cat.sms_schoolcategoryid as categoryId 
     , cat.sms_name as category 
     , count(sch.sms_name) as schoolname 
     , sch.sms_schoolid 
    from Filteredsms_schoolcategory cat 
     inner join Filteredsms_school sch 
     on cat.sms_schoolcategoryid = sch.sms_schoolcategoryid 
    group by cat.sms_schoolcategoryid, cat.sms_name, sch.sms_schoolid) catsch 

    on catsch.sms_schoolid = stu.sms_schoolid 

group catsch.categoryId 
     , catsch.category 
     , catsch.schoolname 
0

を試してみてください。したがって、あなたの2つのcount()は同じ値を返します。実際

select cat.sms_schoolcategoryid as categoryId, 
     cat.sms_name as category , 
     count(distinct sch.sms_name) as schoolname, 
     count(distinct stu.accountnumber) as NoofStudent 
from Filteredsms_schoolcategory cat inner join 
    Filteredsms_school sch 
    on cat.sms_schoolcategoryid = sch.sms_schoolcategoryid inner join 
    FilteredAccount stu 
    on sch.sms_schoolid = stu.sms_schoolid 
group by cat.sms_schoolcategoryid, cat.sms_name ; 

、あなたはおそらく第二カウントが明確な必要はありません:あなたはすぐにcount(distinct)を使用してクエリを修正することができます。ちょうどcount(stu.accountnumber)は学生を数えます。