2014-11-19 4 views
0

Я создал несколько операторов CASE, в которых не работают, которые имеют все разные ошибки. Я провел последние несколько часов, пытаясь понять их, и просто не могу их получить. Если бы кто-нибудь мог объяснить, что я делаю неправильно в каждом, было бы здорово.Операции CASE [Oracle/SQL]

SELECT FIRST_NAME, LAST_NAME, to_number(MANAGER_ID, '9999'), COMMISSION_PCT, 
CASE 
WHEN '"MANAGER_ID" > 0' THEN MANAGER_ID 
ELSE '9999' 
END AS"Review" 
FROM EMPLOYEES 
WHERE DEPARTMENT_ID BETWEEN 80 AND 90 

С помощью этого кода, я должен быть создать новый столбец «Обзор» со следующей информацией введенный: Если у них есть удостоверение личность менеджера, то это будет показан Если они не имеют id менеджера, тогда будет отображаться сообщение Commission_pct Если у них нет комиссии, тогда будет отображаться «9999»

[Написав это, я заметил, что у меня никогда не было никаких команд относительно Commission_Pct, но я предполагаю, что даже не исправил бы эту проблему.]

Моя следующая проблема:

Select NAME, START_DATE, to_char(END_DATE, 'DD/MON/YYYY'), 
CASE END_DATE 
     WHEN '30/Sep/2004' THEN 'End in 2 weeks' 
     ELSE SYSDATE 
END AS "PROMOTIONS" 
FROM f_promotional_menus 

С помощью этого кода это немного странно, но требует от него этого требования. Если есть дата окончания, временно замените ее на «конец через две недели». Если дата окончания отсутствует, замените ее на сегодняшнюю дату.

Мой последний вопрос

SELECT LAST_NAME, to_number(DEPARTMENT_ID, '99999), to_number(SALARY, '9999999.99'), 
CASE DEPARTMENT_ID 
WHEN '10' THEN '1.25*"SALARY"' 
WHEN '90' THEN '1.5*"SALARY"' 
WHEN '130' THEN '1.75*"SALARY"' 
ELSE SALARY 
END AS "NEW_SALARY" 
FROM EMPLOYEES; 

Опять же, новый столбец с требованиями зача- Если отдел идентификатор 10, то 1,25 * зарплата Если отдел идентификатор 90 затем 1,5 * зарплата Если отдел id равно 130, то 1,75 * зарплата В противном случае отобразите старую зарплату.

Если у кого-то даже есть самые смутные идеи о том, где я поступил не так, и у вас есть предложение относительно его исправления, это было бы весьма признательно. Спасибо!

+0

Способ работы с переполнением стека: вы задаете один вопрос одновременно. Пожалуйста, вы можете разделить три вопроса на три разных вопроса о переполнении стека –

ответ

4

Это смешно. Вы нашли несколько разных способов путать.

Первое:

CASE WHEN '"MANAGER_ID" > 0' THEN MANAGER_ID 
    ELSE '9999' 
END AS "Review" 

Ну, у вас есть одиночные кавычки, где вы не хотите их. На самом деле, вы можете удалить все кавычки, предполагая Manager_Id ряд:

CASE WHEN MANAGER_ID > 0 THEN MANAGER_ID 
    ELSE 9999 
END AS Review 

Второе:

CASE END_DATE 
     WHEN '30/Sep/2004' THEN 'End in 2 weeks' 
     ELSE SYSDATE 
END AS "PROMOTIONS" 

Это вопрос формата даты. Я рекомендую DATE ключевое слово с последующим 'YYYY-MM-DD':

CASE END_DATE 
     WHEN DATE '2004-09-30' THEN 'End in 2 weeks' 
     ELSE TO_CHAR(SYSDATE, 'YYYY-MM-DD') 
END AS PROMOTIONS 

Обратите внимание, что ELSE и THEN возвращают те же типы.

Третье:

CASE DEPARTMENT_ID 
    WHEN '10' THEN '1.25*"SALARY"' 
    WHEN '90' THEN '1.5*"SALARY"' 
    WHEN '130' THEN '1.75*"SALARY"' 
    ELSE SALARY 
END AS "NEW_SALARY" 

Есть также процитировать вопрос.Предполагая DEPARTMENT_ID это число, вы можете удалить все цитаты:

CASE DEPARTMENT_ID 
    WHEN 10 THEN 1.25 * SALARY 
    WHEN 90 THEN 1.5 * SALARY 
    WHEN 130 THEN 1.75 * SALARY 
    ELSE SALARY 
END AS NEW_SALARY 

Если DEPARTMENT_ID является строкой, то вы должны иметь котировки на WHEN стоимости.

Смежные вопросы