2013-11-09 20 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