SQL判空時賦值
SQL做統計查詢時,經常需要在分組之後統計另一個字段的總數。這是往往會遇到COUNT(待統計字段)結果爲NULL的情況。如果直接將結果NULL發送給調用者,對方會很難處理。於是需要在傳出判斷:若爲空,則傳0。
要實現這一功能,可使用ISNULL函數。
函數調用方式
ISNULL(需要進行判空的數值,希望判空時返回的值)
調用示例
表Class(AID,班級名稱,班主任姓名)
AID | Name | HeadTeacher |
---|---|---|
1 | 高一一班 | …… |
2 | 高一二班 | …… |
3 | 高一三班 | …… |
4 | 高二一班 | …… |
表Student(AID,學生姓名,所在班級)
AID | Name | ClassAID |
---|---|---|
1 | 張三 | 1 |
2 | 李四 | 1 |
3 | 王五 | 1 |
4 | 張三 | 2 |
5 | 李四 | 2 |
6 | 王五 | 2 |
7 | 趙六 | 2 |
顯然,Student表的ClassAID字段引用自Class表的AID字段,用以說明這個同學屬於哪個班級
--這是一個統計查詢:查詢各個班都分別有多少學生
SELECT
[ClassAID] = C.AID
,[StudentNumber] = COUNT(S.AID)
FROM Class AS C
JOIN Student AS S ON S.ClassAID = C.AID
GROUP BY C.AID
--上面這個查詢會出現一個問題,倘若有一個班級沒有任何學生,那麼那個班級的‘學生數’就會被統計爲NULL
結果會是這樣的:
ClassAID | StudentNumber |
---|---|
1 | 3 |
2 | 4 |
3 | NULL |
4 | NULL |
於是希望在結果爲空的時候顯示0而非NULL
代碼如下:
--這是一個統計查詢:查詢各個班都分別有多少學生
SELECT
[ClassAID] = C.AID
,[StudentNumber] = ISNULL(COUNT(S.AID),0)
FROM Class AS C
JOIN Student AS S ON S.ClassAID = C.AID
GROUP BY C.AID
如此,結果就是這樣的:
ClassAID | StudentNumber |
---|---|
1 | 3 |
2 | 4 |
3 | 0 |
4 | 0 |