我必须按照以下规则对EMPLOYEE表中的员工进行排序:当他们的部门是SALES时,按经验排序,否则按SALARY排序
这就是我的尝试:
select FNAME||' '||LNAME as emp_name,salary,HIRE_DATE from employee
where dept_id=(select dept_id from department where name='SALES') order by HIRE_DATE asc;
UNION
select FNAME||' '||LNAME as emp_name,salary,HIRE_DATE from employee
where dept_id NOT IN (select dept_id from department where name='SALES') order by salary desc;
因为我认为有两个订单而抛出错误。任何解决方案?
答案 0 :(得分:3)
试试这个:
select FNAME||' '||LNAME as emp_name,salary,HIRE_DATE from employee E
join department D
on E.dept_id=D.dept_id
order by (case when D.name='SALES' then HIRE_DATE end),
(case when D.name<>'SALES' then salary end) desc
答案 1 :(得分:2)
首先显示销售部门,按hire_date排序。其他部门接下来按薪水排序。
select FNAME||' '||LNAME as emp_name,salary,HIRE_DATE
from employee
inner join department
on employee.dept_id = department.dept_id
order by
-- Sales department is on top. Swap 0 and 1 if you want sales on bottom
case when department.name = 'SALES'
then 0
else 1
end,
-- And employees are sorted by hire_date
case when department.name = 'SALES'
then employee.HIRE_DATE
else null
end,
-- Employees from other departments are sorted by salary
employee.Salary desc
答案 2 :(得分:1)
使用decode:
SELECT fname || ' ' || lname AS emp_name
,salary
,hire_date
FROM employee e
,department d
WHERE e.dept_id = d.dept_id
ORDER BY decode(d.name,'SALES',experience,salary)
;
答案 3 :(得分:0)
SELECT e.fname||' '||e.lname as emp_name, e.salary, e.hire_date
FROM employee e, department d
WHERE e.dept_id = d.dept_id
ORDER BY
CASE
WHEN d.name ='SALES' then
hire_date ASC
ELSE
salary DESC
END
行。道歉,试试这个 - 可能已经回答过了。