create table EMP_EMPLOYEE_
(
ID   CHAR(32) not null,
name varchar(20) ); --员工表create table BFT_
(
id CHAR(32) not null,
employee    CHAR(32) not null,
base number,
month number
 );   --数据表1    employee字段关联员工表的id字段
 
create table CFT_
(
id CHAR(32) not null,
employee    CHAR(32) not null,
base number,
month number
 );   --数据表2    employee字段关联员工表的id字段
提供数据:
insert into EMP_EMPLOYEE_ (ID, NAME)values ('1                               ', '张三');
insert into BFT_ (ID, EMPLOYEE, BASE, MONTH)values ('000001                          ', '1                               ', 10, 1);
insert into BFT_ (ID, EMPLOYEE, BASE, MONTH)
values ('000002                          ', '1                               ', 20, 2);
insert into CFT_ (ID, EMPLOYEE, BASE, MONTH)
values ('000001                          ', '1                               ', 80, 2);
(员工表)
1 1                                张三(数据表1)
1 000001                           1                                10 1
2 000002                           1                                20 2(数据表2)
1 000001                           1                                80 2
我的错误语句:
( select a.name,b.base,c.base from EMP_EMPLOYEE_  a 
 left join   BFT_  b on b.employee = a.id
 left join CFT_ c on c.employee = a.id  )
查出来的结果:
1 张三 10 80
2 张三 20 80
我要的结果:
1 张三 10 80
2 张三 20 声明 数据表1  和数据表2 没有任何关系  但他们都和员工表有着关系、其实不至数据1 和2 甚至有3 和4、、
看懂的了帮帮忙呀!
我实在是不会写这条语句了
其实目的就是多个表放在一列显示
就是 同一个员工  要显示数据1表的字段  也要显示数据2表的字段、

解决方案 »

  1.   

    加一个排序的伪列去除重复的c.base即可
      

  2.   

    这样?
    我只粗粗看了下,对比lz的结果,去除重复的c.base,囧
    SELECT NAME,base1,Decode(rn,1,base2,null)base2 FROM 
    (
      select a.name,b.base base1,c.base base2,Row_Number() over (PARTITION BY a.NAME ORDER BY c.base)rn from EMP_EMPLOYEE_ a  
     left join BFT_ b on b.employee = a.id
     left join CFT_ c on c.employee = a.id
    )