2013-11-10 60 views
1

我試圖讓結果'無'每次它給我一個空結果。現在它給了我一個0爲空結果。我怎麼能有一行顯示我'沒有',而不是0爲空結果。SQL錯誤:ORA-00932:不一致的數據類型:預期的CHAR有NUMBER

我試圖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 

回答

3

使用功能嘗試:合併(CAST(SUM(表達式1)爲varchar), '無')

作爲一個側面說明,我質疑在您的查詢中使用DISTINCT。

+0

所以我做了COALESCE(TO_CHAR(SUM(ENROLLED)),'none')ENROLLED這給了我想要的總和,但它不顯示'none'... – Manual

+0

它是什麼顯示? – mrkb80

+0

合併適用於NULL不爲零。這意味着它一直返回SUM(ENROLLED)。 – kristyna

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

這會返回不同的類型。讓它相同(投SUM爲string)

1

的錯誤是正常的,因爲你的命令

CASE WHEN SUM(就讀)= 0,則 '無' ELSE SUM(就讀)END AS就讀

使用相同的列作爲字符串「無」和號碼SUM(登記)

則可以使用列作爲串並顯示使用

情況相同的時間數。當SUM(登記)= 0 THEN '無' ELSE TO_CHAR(SUM(就讀))END AS就讀

0

試試這個:

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

這應該不使用鑄鐵和VARCHAR工作。

相關問題