我现在有一个A表,
表结构是:
编号,工号,注册日期,注册人员,区分
123   ,001, 2011-10-11,张三  ,0
234   ,001, 2011-10-10,李四  ,123。。其中区分:0表示是计划,非0的值是对应表中编号的记录,(例,编号为234的记录的区分值是123的话,则表示234的实绩是编号为123的记录)现在我想查询
工号,计划的注册日期,计划的注册人员,实绩的注册日期,实绩的注册人员
001 ,2011-10-11    ,张三            ,2011-10-10   ,李四请问这样的oracle查询语句怎么写?

解决方案 »

  1.   

    select 工号,计划的注册日期,计划的注册人员,(select 注册日期,注册人员 from tbl where 编号=a.区分) from tbl a试试这个。
      

  2.   

    没能理解楼主的两条记录中,123是计划的记录,还是实绩的记录?我在这里理解为是计划的记录,如有不同,请修改SQL
    SELECT T1.工号,T1.注册日期 计划注册日期,T1.注册人员 计划注册人员,T2.注册日期 实际注册日期,T2.注册人员 实际注册人员
    FROM Table T1,Table T2
    WHERE T1.编号 = T2.区分
      AND T1.工号 = T2.工号;
      

  3.   

    不可以~~~查不出来,提示(ORA-00913-值过多)
      

  4.   

    不知道这个是不是你要的结果
    with tbl as
    (
        select '123' as "编号", '001' as "工号", '2011-10-11' as "注册日期", '张三' as "注册人员", '0' as "区分" from dual
         union all
        select '234' as "编号", '001' as "工号", '2011-10-10' as "注册日期", '李四' as "注册人员", '123' as "区分" from dual
         union all
        select '456' as "编号", '002' as "工号", '2011-10-11' as "注册日期", '王五' as "注册人员", '0' as "区分" from dual
         union all
        select '789' as "编号", '002' as "工号", '2011-10-10' as "注册日期", '赵六' as "注册人员", '456' as "区分" from dual
         union all
        select '111' as "编号", '003' as "工号", '2011-10-10' as "注册日期", '陈七' as "注册人员", '0' as "区分" from dual
    )
    select connect_by_root "工号" as "工号",
           connect_by_root "注册日期" as "计划注册日期",
           connect_by_root "注册人员" as "计划注册人员",
           "注册日期" as "实际注册日期",
           "注册人员" as "实际注册人员"
      from tbl t
     where connect_by_isleaf = 1
     start with "区分" = 0
    connect by prior "编号" = "区分";
     
    工号   计划注册日期       计划注册人员       实际注册日期       实际注册人员
    ------ ------------------ ------------------ ------------------ ------------------
    001    2011-10-11         张三               2011-10-10         李四
    002    2011-10-11         王五               2011-10-10         赵六
    003    2011-10-10         陈七               2011-10-10         陈七
      

  5.   

    SELECT T1.工号,T1.注册日期 计划注册日期,T1.注册人员 计划注册人员,T2.注册日期 实际注册日期,T2.注册人员 实际注册人员
    FROM Table T1,Table T2
    WHERE T1.编号 = T2.区分
      AND T1.工号 = T2.工号;--题目看错,我只关注编号,原来区分和工号也有对应在关系!嘿嘿!!!
      

  6.   


    是不是在9i中不能使用connect_by_root的啊,我的是oracle 9i....
      

  7.   

    9i 应该不支持 connect_by_root
    我这没有 9i 的环境,你试下下面的代码,不知道 9i 支不支持 lead
    with tbl as
    (
        select '123' as "编号", '001' as "工号", '2011-10-11' as "注册日期", '张三' as "注册人员", '0' as "区分" from dual
         union all
        select '234' as "编号", '001' as "工号", '2011-10-10' as "注册日期", '李四' as "注册人员", '123' as "区分" from dual
         union all
        select '456' as "编号", '002' as "工号", '2011-10-11' as "注册日期", '王五' as "注册人员", '0' as "区分" from dual
         union all
        select '789' as "编号", '002' as "工号", '2011-10-10' as "注册日期", '赵六' as "注册人员", '456' as "区分" from dual
         union all
        select '111' as "编号", '003' as "工号", '2011-10-10' as "注册日期", '陈七' as "注册人员", '0' as "区分" from dual
    )
    select * 
      from (select "工号", 
                   "注册日期" as "计划注册日期",
                   "注册人员" as "计划注册人员",
                   nvl(lead("注册日期") over(partition by "工号" order by "区分"), "注册日期") as "实际注册日期",
                   nvl(lead("注册人员") over(partition by "工号" order by "区分"), "注册人员") as "实际注册人员",
                   "区分"
              from tbl) t
     where t."区分" = 0;
    工号   计划注册日期       计划注册人员       实际注册日期       实际注册人员
    ------ ------------------ ------------------ ------------------ ------------------
    001    2011-10-11         张三               2011-10-10         李四
    002    2011-10-11         王五               2011-10-10         赵六
    003    2011-10-10         陈七               2011-10-10         陈七
      

  8.   

    SELECT a1.工号,a1.注册日期 AS 计划的注册日期,a1.注册人员 AS 计划的注册人员,
           a2.注册日期 AS 实绩的注册日期,a2.注册人员 AS 实绩的注册人员
    FROM A a1,A a2
    WHERE a1.编号=a2.区分
      

  9.   

    试下这个: select a.no,a.注册日期 计划的注册日期,a.注册人员 计划的注册人员,b.注册日期 实际的注册日期,b.注册人员 实际的注册人员
      from 
     ((select t.no,t.注册日期 计划的注册日期,t.注册人员 计划的注册人员 from A  t  where t.区分='0') a
     inner join 
     (select s.实际注册日期 实际的注册日期,s.实际注册人员 实际的注册人员 A s where s.区分<>'0') b
     on t.工号=s.工号)