2012-07-18 34 views
1

我有以下规则来在EMPLOYEE表中的员工进行排序:当他们的部门是销售,排序的经验,否则排序薪金排序表

enter image description here

这是什么我曾尝试过:

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

所以你想要显示从销售第一,然后剩下的? – 2012-07-18 10:14:32

+0

显示顺序并不重要:销售可以先发或后发,销售员工按经验排序,其他部门员工按工资排序。 – user1356163 2012-07-18 10:18:04

回答

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 
+0

非常感谢。漂亮和时尚的解决方案。 – user1356163 2012-07-18 10:29:31

1

使用解码:

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) 
; 

又见http://sqlfiddle.com/#!4/afa6f/1

2

销售部门首先显示,由聘用日期排序。其他部门按照工资排序。

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 
+0

不错的解决方案,虽然有点长。 – user1356163 2012-07-18 10:37:55

+0

@ganducoder谢谢。这一部分将部门分为两组,我认为你需要这样做,销售在上面,然后休息。这就是为什么(和我的习惯打破线的可读性)它有点长:-) – 2012-07-18 10:40:31

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 

确定。道歉,试试这个 - 大概已经回答了。

+0

这是我所尝试的哪个引发错误。无法在一个表中有两个订单/ – user1356163 2012-07-18 10:36:58