报表需求 :             员工号  规则一 规则二 规则三...   是否合格
是否合格是在规则一 规则二...基础上判定的
但是联表查出来的数据是这样的员工号  规则一  合格
员工号  规则二  合格
员工号  规则三  合格....
员工号 和  合格 是一张表的 所以感觉重复了 我应该怎么写存储过程呢 把列变成行 

解决方案 »

  1.   

    sql可以执行成功 存储过程就没问题了、create table t1
    (
           y_no varchar2(20),
           gz varchar2(10),
           hg varchar2(10)
    )insert into t1 values ('no1','规则一','合格');
    insert into t1 values ('no1','规则二','合格');
    insert into t1 values ('no1','规则三','合格');
    insert into t1 values ('no2','规则一','合格');
    insert into t1 values ('no2','规则二','不合格');
    insert into t1 values ('no2','规则三','合格');
    insert into t1 values ('no3','规则一','合格');
    insert into t1 values ('no3','规则二','合格');
    insert into t1 values ('no3','规则三','不合格');select y_no  员工号,
           decode(sum(c1),1,'合格','不合格') 规则一,
           decode(sum(c2),1,'合格','不合格') 规则二,
           decode(sum(c3),1,'合格','不合格') 规则三,
           case when sum(c1+c2+c3)=3 then '合格' else '不合格' end  是否合格  
    from 
          (select t1.y_no,
                 case when gz='规则一' and hg='合格' then 1 else 0 end c1,
                 case when gz='规则二' and hg='合格' then 1 else 0 end c2,
                 case when gz='规则三' and hg='合格' then 1 else 0 end c3
          from t1)
    group by y_no
    order by y_no     员工号   规则一  规则二  规则三   是否合格
    ----------------------------------------------
    1    no1    合格    合格    合格    合格
    2    no2    合格    不合格    合格    不合格
    3    no3    合格    合格    不合格    不合格
      

  2.   

    select 员工号,
    sum(case when 规则列=‘规则一’and 合格列=‘合格’ then 1 else 0 end) as 规则一,
    sum(case when 规则列=‘规则一’and 合格列=‘合格’ then 1 else 0 end) as 规则二,
    sum(case when 规则列=‘规则一’and 合格列=‘合格’ then 1 else 0 end) as 规则三 ,
    (select case when count(1)=1 then 合格 else 不合格 from table b where a.员工号=b.员工号 group by b.员工号 ,合格 ) as 合格
    from table a group by 员工号
      

  3.   

    关系不明确,也没有示例的数据。
    表a和表b除了员工号,还有关联条件吗?
    表a和表b是一对三的固定关系吗?