#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
это число — эти значения, безусловно, числовые. Числа должны сравниваться с числами, а не со строками, поэтому я убрал одинарные кавычки.
Кроме того, нет необходимости экранировать псевдонимы столбцов, поэтому двойные кавычки излишни.