2017-04-05 40 views
0

enter image description here這是當前結果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 
     ; 

我有三個表一個是分類和2是學校,三是學生。當我加入表格類別和學校時,我只想代表類別統計學校,這會返回準確的結果,當我將學生表格與學校表格結合起來時,會返回錯誤結果。請指導我如何可能。

+0

請創建一個小例子,包括輸入,所需輸出和實際輸出。 –

+1

你能告訴我們原始數據和你從查詢中返回的結果嗎? –

+2

添加一些示例表格數據以及當前結果和預期結果 - 所有樣式以及格式化文本。 – jarlh

回答

0

除非您提供有關您的數據模型的更多信息,否則有猜測。但是,您的問題似乎源於以下內容:

當您加入學生表時,對於學校類別和學校(*)的每種組合,都會生成其他記錄。也就是說,你的sql不再按學校類別計算學校數,而是按學生計算。

對於一個具體的解決方案和一個很好的建議請參閱@ Nick.McDermaid的評論。

0

嘗試這一個

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

count()返回非NULL值的數量。所以,你的兩個count()將返回相同的值。您可以快速修復使用count(distinct)查詢:

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(stu.accountnumber)應該算在學生。