2012-03-08 27 views
1

我正在爲我的Oracle類工作以下問題。我有下面的解決方案,這有效,但我想格式化美元輸出。當我添加「TO_CHAR」語句時,出現「FROM」不在預期位置的錯誤。Oracle作業無法獲得「... THEN TO_CHAR」的功能嗎?

家庭作業問題:

使用Oracle數據庫的員工表和CASE表達式解碼部門ID。顯示部門編號,姓氏,工資以及一個名爲「新工資」的欄,其值基於以下條件: 如果部門編號爲10,那麼1.25 *工資 如果部門編號爲90,那麼1.5 *工資 如果部門ID爲130則1.75 *工資 否則顯示舊的工資。

工作語句,而不用 「TO_CHAR」:

SELECT LAST_NAME AS "LAST NAME", DEPARTMENT_ID AS "DEPARTMENT ID", SALARY, 
CASE DEPARTMENT_ID 
WHEN 10 THEN SALARY * 1.25 
WHEN 90 THEN SALARY * 1.50 
WHEN 130 THEN SALARY * 1.75 
ELSE SALARY END AS "NEW SALARY" 
FROM EMPLOYEES; 

聲明的錯誤了:

SELECT LAST_NAME AS "LAST NAME, DEPARTMENT_ID AS "DEPARTMENT ID", SALARY, 
CASE DEPARTMENT_ID 
WHEN 10 THEN TO_CHAR (SALARY*1.25, '$99,999.99') 
WHEN 90 THEN TO_CHAR (SALARY*1.50, '$99,999.99') 
WHEN 130 THEN TO_CHAR (SALARY*1.75, '$99,999.99') 
ELSE SALARY END AS "NEW SALARY" 
FROM EMPLOYEES; 

謝謝!

結果後修正如下:

姓部門ID SALARY新的工資 國王90 24000 $ 36,000.00 科赫哈90 17000 $ 25,500.00 德哈恩90 17000 $ 25,500.00

+3

您的第二個語句一個錯字:你忘了放「後面的名字,是否只是在這裏? – giorashc 2012-03-08 18:25:42

+0

你是對的,下面的答案仍然有用,但在此之後只有更正! – 2012-03-08 18:27:14

+0

+1因爲承認它的作業問題 – tbone 2012-03-08 18:35:59

回答

4

問題的克雷格的解釋是正確的,但不是僅僅增加另一個TO_CHAR,我會說包裹在一個TO_CHAR整個CASE表達式:

SELECT LAST_NAME AS "LAST NAME", DEPARTMENT_ID AS "DEPARTMENT ID", SALARY, 
TO_CHAR(
CASE DEPARTMENT_ID 
WHEN 10 THEN SALARY * 1.25 
WHEN 90 THEN SALARY * 1.50 
WHEN 130 THEN SALARY * 1.75 
ELSE SALARY END, 
'$99,999.99' 
) AS "NEW SALARY" 
FROM EMPLOYEES; 
+0

我喜歡它..只有一個地方來改變格式。 – Craig 2012-03-08 22:24:37

+0

首先...感謝大家的快速反應!我喜歡這種方法,但是,它只將格式應用於第二個薪金列,而不是第一個?請參閱上面的編輯。謝謝! – 2012-03-13 17:09:44

+0

@凱文 - 嗯,是的,TO_CHAR只適用於它內部的表達式。如果您還希望格式化基本薪金列,請將TO_CHAR表達式也包括在內。 – 2012-03-13 19:25:09

3

你不應該做出TO_CHAR上ELSE聲明中的薪資?

2

問題是您的WHEN/THEN個案正在返回一個字符串(因爲您正在使用TO_CHAR),但您的ELSE正在返回一個數字。只需將TO_CHAR添加到ELSE即可。