使用一个表列名称和另一个表的列值连接不同的表

时间:2013-10-16 13:29:25

标签: sql oracle plsql

我是oracle的新手。这里我创建了两个表如下: 表1:

create table emp_Det(emp_id varchar2(30), emp_name varchar2(80), PLSQL varchar2(20), ADF varchar2(20));

表2:

create table group(grp_id varchar2(30), grp_name varchar2(80));

我在两个表中都插入了值,如下所示:

表1:emp_Det

Emp_id    Emp_name   PLSQL    ADF
Sample1    Sample1     5       5
Sample3    Sample2     5       5
Sample3    Sample3     5       5

表2:组

grp_id      grp_name
ORA          PLSQL
ORAS         ADF

我们必须从这两个表中选择列,并且必须将一个表的列名与另一个表的列值连接起来。列名称为emp_id,Emp_name,Grp_id,Grp_name,rating。

例如,在第一个表( EMP_DET )中“PLSQL”是列名,“ PLSQL ”是第二个表的值( )列grp_name和结果应如下所示

EMP_ID   EMP_NAME    GRP_ID     GRP_NAME    Rating
Sample1   Sample1     ORA        PLSQL         5
Sample1   Sample1     ORAS       ADF           5

请帮我准备查询或程序或建议我

2 个答案:

答案 0 :(得分:1)

尝试这样的事情(不完全确定语法):

SELECT emp_id, emp_name, grp_id, grp_name, plsql AS rating
  FROM emp_det, group
 WHERE grp_name = 'PLSQL'
UNION
SELECT emp_id, emp_name, grp_id, grp_name, adf AS rating
  FROM emp_det, group
 WHERE grp_name = 'ADF';

答案 1 :(得分:1)

如果您使用11g及以上,那么您可以试试这个:

select t.*, g.grp_id
from
(select *
from emp_det
unpivot
(
  rating for group_name in ("PLSQL", "ADF")
)) t join "group" g on t.group_name = g.grp_name

Here is a sqlfiddle demo