2013-11-09 18 views
0

我想有一個結果「無」每次它給了我一個空結果的時間,而不是0「無」。現在它給了我一個0爲空結果。我怎麼能有一行顯示我'沒有',而不是0爲空結果。有怎樣的行顯示我空結果

我已經試過NVL(SUM(就讀), '無')AS登記並不起作用

SELECT DISTINCT lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME, NVL(SUM(ENROLLED),'none') AS ENROLLED 
FROM STUDENT lt 
LEFT OUTER JOIN 
(SELECT s.STUDENT_ID, e.ENROLL_DATE,COUNT(z.COURSE_NO) AS ENROLLED 
FROM STUDENT s 
LEFT JOIN ENROLLMENT e ON s.STUDENT_ID = e.STUDENT_ID 
LEFT JOIN SECTION z ON e.SECTION_ID = z.SECTION_ID 
WHERE s.PHONE LIKE '702%' 
GROUP BY s.STUDENT_ID, e.ENROLL_DATE) rt 
ON lt.STUDENT_ID = rt.STUDENT_ID 
WHERE lt.PHONE LIKE '702%' 
GROUP BY lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME,ENROLLMENTS; 

現在我得到

STUDENT_ID FIRST_NAME    LAST_NAME     ENROLLED 
---------- ------------------------- ------------------------- ----------- 
     253 Walter     Boremmann      1 
     396 James E.     Norman      0 
etc 

但我想

STUDENT_ID FIRST_NAME    LAST_NAME     ENROLLED 
---------- ------------------------- ------------------------- ----------- 
     253 Walter     Boremmann      1 
     396 James E.     Norman      none 
+0

這通常是你會在你的表示層處理,即顯示數據的應用程序。儘管你可以嘗試'CAST'到一個varchar類型。 – CompuChip

+1

嘗試'IF(SUM(就讀)= 0, '無',SUM(就讀))作爲enrolled'代替 – user2577405

+0

我沒有看到你的榜樣任何空值:/ –

回答

1

您似乎在混合null值與0。他們不一樣。 NVL將返回第一表達,如果它不是null或第二表達式,如果第一位是null。由於0不是null那麼你總是會得到SUM(ENROLLED)。您應該使用0進行比較。

只要改變這一點:

NVL(SUM(ENROLLED),'none') AS ENROLLED 

進入這個:

CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE SUM(ENROLLED) END AS ENROLLED 
+0

我得到一個錯誤的SQL錯誤:ORA-00932 :不一致的數據類型:預期CHAR得到NUMBER ......我已經試過TO_CHAR和TO_NUMBER的總和,它不工作...感謝您的幫助 – Manual