日期:2014-05-17  浏览次数:20878 次

关于存储过程 这样的情况怎么办
报表需求 : 员工号 规则一 规则二 规则三... 是否合格


是否合格是在规则一 规则二...基础上判定的


但是联表查出来的数据是这样的

员工号 规则一 合格
员工号 规则二 合格
员工号 规则三 合格

....


员工号 和 合格 是一张表的 所以感觉重复了 

我应该怎么写存储过程呢 把列变成行 




------解决方案--------------------
sql可以执行成功 存储过程就没问题了、
SQL code

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    合格    合格    不合格    不合格