1

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;

私が思うに2つの注文のためにエラーがスローされます。解決策はありますか?

4

4 に答える 4

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
于 2012-07-18T10:24:27.873 に答える
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
于 2012-07-18T10:26:29.253 に答える
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も参照してください

于 2012-07-18T10:23:24.437 に答える
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 

わかった。申し訳ありませんが、これを試してください-おそらくすでに回答されています。

于 2012-07-18T10:29:22.840 に答える