5 sql oracle rows multiple-columns
我有表中的数据如下
DEPTNO ENAME SALARY
------ ---------- ------
Developer SENIOR 100000
Developer JUNIOR 100000
Tester SENIOR 200000
Tester JUNIOR 100000
Architect SENIOR 300000
Architect JUNIOR 300000
Run Code Online (Sandbox Code Playgroud)
我需要向他们展示
Occupation Senior Sal Junior Sal
------ ---------- ------
Developer SENIOR JUNIOR
Developer 100000 100000
Tester SENIOR JUNIOR
Tester 200000 100000
Architect SENIOR JUNIOR
Architect 300000 300000
Run Code Online (Sandbox Code Playgroud)
我坚持这个如何实现这一目标
使用
选择部门号,
高级_萨尔,
初级_萨尔,
row_number() over(partition BY deptno order bysenior_sal DESC) rn
从
(SELECT A.deptno, A.salarysenior_sal, b.salaryjunior_sal
从
(SELECT deptno, TO_CHAR(salary) 工资 FROM your_table WHERE ename = 'SENIOR'
) A,
(SELECT deptno, TO_CHAR(salary) 工资 FROM your_table WHERE ename = 'JUNIOR'
) b
其中 A.deptno = b.deptno
联合所有
SELECT A.deptno,A.salarysenior_sal,b.salaryjunior_sal
从
(SELECT deptno, DECODE(ename, 'SENIOR', 'SENIOR') 工资 FROM your_table
WHERE ename = '高级'
) A,
(SELECT deptno, DECODE(ename, 'JUNIOR', 'JUNIOR') 工资 FROM your_table
WHERE ename = 'JUNIOR'
) b
其中 A.deptno = b.deptno
);
工作演示
在 SQL*Plus 中:
SQL> column rn noprint
SQL> WITH sample_data AS(
2 SELECT 'Developer' DEPTNO, 'SENIOR' ENAME, 100000 SALARY FROM dual UNION ALL
3 SELECT 'Developer' DEPTNO, 'JUNIOR' ENAME, 100000 SALARY FROM dual UNION ALL
4 SELECT 'Tester' DEPTNO, 'SENIOR' ENAME, 200000 SALARY FROM dual UNION ALL
5 SELECT 'Tester' DEPTNO, 'JUNIOR' ENAME, 100000 SALARY FROM dual UNION ALL
6 SELECT 'Architect' DEPTNO, 'SENIOR' ENAME, 300000 SALARY FROM dual UNION ALL
7 SELECT 'Architect' DEPTNO, 'JUNIOR' ENAME, 300000 SALARY FROM dual
8 )
9 -- end of sample_data mimicking real table
10 SELECT deptno,
11 senior_sal,
12 junior_sal,
13 row_number() over(partition BY deptno order by senior_sal DESC) rn
14 FROM
15 (SELECT A.deptno, A.salary senior_sal, b.salary junior_sal
16 FROM
17 (SELECT deptno, TO_CHAR(salary) salary FROM sample_data WHERE ename = 'SENIOR'
18 ) A,
19 (SELECT deptno, TO_CHAR(salary) salary FROM sample_data WHERE ename = 'JUNIOR'
20 ) b
21 WHERE A.deptno = b.deptno
22 UNION ALL
23 SELECT A.deptno, A.salary senior_sal, b.salary junior_sal
24 FROM
25 (SELECT deptno, DECODE(ename, 'SENIOR', 'SENIOR') salary FROM sample_data
26 WHERE ename = 'SENIOR'
27 ) A,
28 (SELECT deptno, DECODE(ename, 'JUNIOR', 'JUNIOR') salary FROM sample_data
29 WHERE ename = 'JUNIOR'
30 ) b
31 WHERE A.deptno = b.deptno
32 );
Run Code Online (Sandbox Code Playgroud)
输出:
DEPTNO SENIOR_SAL JUNIOR_SAL
--------------- --------------- ---------------
Architect SENIOR JUNIOR
Architect 300000 300000
Developer SENIOR JUNIOR
Developer 100000 100000
Tester SENIOR JUNIOR
Tester 200000 100000
6 rows selected.
SQL>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |