2016-03-07 244 views
0

我試圖讓查詢列出顧問並提供每個活動學生的數量。我可以列出有1位學生的顧問,排除1位以上的顧問,但無法讓顧問返回0或NULL計數。SQL查詢返回一個結果,不返回0或NULL結果

Select Advisors.AdvisorID, Advisors.FirstName, Advisors.LastName, COUNT(case Students.IsActive WHEN '1' then 1 else NULL end) AS "Number of Students" 
FROM Advisors, Students 
WHERE Advisors.AdvisorID=Students.AdvisorID 
GROUP BY Advisors.AdvisorID, Advisors.FirstName, Advisors.LastName 
HAVING COUNT(case Students.IsActive WHEN '1' then 1 else NULL end)='1' 

統計活動調查問卷,並返回顧問列表與顧問一個學生,與0學生顧問回來空白。我錯過了什麼?

Select Advisors.AdvisorID, Advisors.FirstName, Advisors.LastName, COUNT(case Students.IsActive WHEN '1' then 1 else NULL end) AS "Number of Students" 
FROM Advisors, Students 
WHERE Advisors.AdvisorID=Students.AdvisorID 
GROUP BY Advisors.AdvisorID, Advisors.FirstName, Advisors.LastName 
HAVING COUNT(case Students.IsActive WHEN '1' then 1 else NULL end) IS NULL 

回來與列名和任何數據。我有雙重檢查表顧問表有3個條目,一個有2個活躍的學生和一個非活動0或1使用位,一個沒有學生,一個有一個。

使用< = 1或< 1類似地導致空白數據。

回答

1

請使用ANSI JOIN語法

Select Advisors.AdvisorID, 
      Advisors.FirstName, 
      Advisors.LastName, 
      COUNT(case Students.IsActive WHEN '1' then 1 else NULL end) AS "Number of Active Students" 
FROM  Advisors 
LEFT JOIN Students 
ON  Advisors.AdvisorID=Students.AdvisorID 
GROUP BY Advisors.AdvisorID, 
      Advisors.FirstName, 
      Advisors.LastName 
HAVING COUNT (Students.AdvisorID) = 1 
+0

?我看不出這是一個解決方案還是任何幫助,它是我剛纔以不同的格式提供的,結果在sql server中是一樣的,空白數據爲0,正確的數據爲1並且多於1 –

+0

它是在你的情況下使用LEFT JOIN代替「INNER JOIN」。 HAVING條件也不同 – Squirrel

+0

OIC!這正是我所需要的,非常感謝 –