SQL Plus — разные столбцы с зарплатой каждого department_id

#sql #oracle

#sql #Oracle

Вопрос:

Я должен показывать для каждого job_id его зарплату в столбце department_id.

Пример из примера моего учителя.

На данный момент я сделал это, но я не знаю, как показать только зарплату для каждого столбца отдела.

 SELECT job_id, SUM(salary) "Dep20", SUM(salary) "Dep50", SUM(salary) "Dep60", SUM(salary) "Dep90", SUM(salary) "Total"
FROM employees
WHERE department_id IN ('20', '50', '60', '90')
GROUP BY job_id;
 

Результат в SQL Plus

Ответ №1:

Используйте case выражение:

 SELECT job_id,
       SUM(CASE WHEN department_id = 20 THEN salary END) as Dep20,        
       SUM(CASE WHEN department_id = 50 THEN salary END) as Dep50,        
       SUM(CASE WHEN department_id = 60 THEN salary END) as Dep60,        
       SUM(CASE WHEN department_id = 90 THEN salary END) as Dep90,
       SUM(salary) as Total
FROM employees
WHERE department_id IN (20, 50, 60, 90)
GROUP BY job_id;
 

Я предполагаю, что department_id это число — эти значения, безусловно, числовые. Числа должны сравниваться с числами, а не со строками, поэтому я убрал одинарные кавычки.

Кроме того, нет необходимости экранировать псевдонимы столбцов, поэтому двойные кавычки излишни.