SQL错误:ORA-00932:不一致的数据类型:预期CHAR得到NUMBER

时间:2013-11-10 00:44:01

标签: sql oracle sum to-char

我每次给它一个null结果时都试图得到'none'的结果。现在它给我一个0表示空结果。我怎么能有一行显示'无'而不是0表示空结果。

我已经尝试了TO_CHAR和TO_NUMBER作为总和而我无法让它显示'无'......

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

所以在尝试上面的时候我得到SQL错误:ORA-00932:不一致的数据类型:预期的CHAR得到了NUMBER

这就是我所拥有的

SELECT lt.STUDENT_ID,lt.FIRST_NAME, lt.LAST_NAME, CASE WHEN SUM(ENROLLED) = 0 THEN 'none' ELSE SUM(ENROLLED) END 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

4 个答案:

答案 0 :(得分:4)

尝试使用函数:COALESCE(cast(sum(expr1)as varchar),'none')

作为旁注,我质疑在您的查询中使用DISTINCT。

答案 1 :(得分:3)

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

这会返回不同的类型。使其相同(将SUM转换为字符串)

答案 2 :(得分:1)

错误是正常的,因为您的命令

当SUM(ENROLLED)= 0时的情况那么'没有'和(注册)以注册结束

使用与字符串'none'相同的列和数字SUM(ENROLLED)

您可以将该列用作字符串,并使用

同时显示该数字

当SUM(ENROLLED)= 0时,'无'ELSE TO_CHAR (SUM(ENROLLED))END IN ENROLLED

答案 3 :(得分:0)

试试这个:

COALESCE(to_char(sum(expr1)), 'none')

这应该不使用cast和varchar。