Ошибка SQL: ORA-00932: несогласованные типы данных: ожидаемый CHAR получил НОМЕР

Я пытаюсь получить результат «нет» каждый раз, когда он дает мне нулевой результат. Прямо сейчас он дает мне 0 за нулевой результат. Как я могу сделать так, чтобы строка показывала мне «нет» вместо 0 для нулевого результата.

Я пробовал TO_CHAR и TO_NUMBER для суммы, и мне не удается отобразить "none" ...

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

поэтому при попытке сделать это я получаю ошибку SQL: ORA-00932: несогласованные типы данных: ожидаемый CHAR получил НОМЕР

это то, что у меня есть

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

person Manual    schedule 10.11.2013    source источник


Ответы (4)


Попробуйте использовать функцию: COALESCE (cast (sum (expr1) as varchar), 'none')

В качестве примечания, я сомневаюсь в использовании DISTINCT в вашем запросе.

person mrkb80    schedule 10.11.2013
comment
поэтому я сделал COALESCE (TO_CHAR (SUM (ENROLLED)), 'none') ENROLLED, который дает мне сумму, которую я хочу, но не отображает 'none' ... - person Manual; 10.11.2013
comment
что он отображает? - person mrkb80; 11.11.2013
comment
Coalesce работает с NULL, а не с нулем. Это означает, что он всегда возвращает SUM (ENROLLED). - person kristyna; 14.12.2015

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

это возвращает разные типы. Сделайте то же самое (преобразуйте СУММ в строку)

person LINQ2Vodka    schedule 10.11.2013

Ошибка нормальная, потому что ваша команда

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

использует тот же столбец, что и строка 'none' и число SUM (ЗАПИСАНО)

вы можете использовать столбец как строку и одновременно отображать число, используя

СЛУЧАЙ, КОГДА SUM (ЗАПИСАНО) = 0 THEN 'none' ELSE TO_CHAR (SUM (ENROLLED)) КОНЕЦ КАК ЗАПИСАНО

person M.Hefny    schedule 21.09.2014

Попробуй это:

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

Это должно работать без использования cast и varchar.

person P.Kim    schedule 16.10.2017