当前位置: 代码迷 >> Oracle开发 >> 关于分组的有关问题,救
  详细解决方案

关于分组的有关问题,救

热度:9   发布时间:2016-04-24 07:32:14.0
关于分组的问题,急救…
员工 成绩 打分人

11 合格 111
22 合格 222
33 合格 111
33 合格 111


是这样的,如果33这个员工只被111打分了,那么222也要显示出来为0
需要这样的结果

33 合格 2 111
33 合格 0 222

------解决方案--------------------
SQL code
create table t1 (员工 varchar2(10), 成绩 varchar2(10), 打分人 varchar2(10));insert into t1 values ('11','合格','111');insert into t1 values ('22','合格','222');insert into t1 values ('33','合格','111');insert into t1 values ('33','合格','111');insert into t1 values ('11','合格','222');insert into t1 values ('11','合格','222');insert into t1 values ('11','合格','333');insert into t1 values ('22','合格','444');insert into t1 values ('33','合格','555');select 员工,成绩,      (select count(1) from t1 a where a.员工=t1.员工 and a.打分人=t2.打分人) 合格数,      t2.打分人from t1,(select distinct 打分人 from t1) t2 group by 员工,成绩,t2.打分人order by 员工      员工    成绩   合格数    打分人------------------------------------------------1    11    合格    1    1112    11    合格    2    2223    11    合格    1    3334    11    合格    0    4445    11    合格    0    5556    22    合格    0    1117    22    合格    1    2228    22    合格    0    3339    22    合格    1    44410    22    合格    0    55511    33    合格    2    11112    33    合格    0    22213    33    合格    0    33314    33    合格    0    44415    33    合格    1    555
------解决方案--------------------
SQL code
with t as(select '11' yg,'合格' cj,'111' dfr from dualunion allselect '22','合格','222' from dualunion allselect '33','合格','111' from dualunion allselect '33','合格','111' from dualunion allselect '22','合格','333' from dualunion allselect '22','合格','444' from dualunion allselect '22','合格','555' from dual), t_dfr as(select '111' dfr from dualunion allselect '222' from dualunion allselect '333' from dualunion allselect '444' from dualunion allselect '555' from dual)select yg, t_dfr.dfr, sum(decode(t.dfr, t_dfr.dfr, 1, 0)) c  from t, t_dfr group by yg, t_dfr.dfr order by yg, t_dfr.dfrYG DFR          C-- --- ----------11 111          111 222          011 333          011 444          011 555          022 111          022 222          122 333          122 444          122 555          133 111          233 222          033 333          033 444          033 555          0 15 rows selected
------解决方案--------------------
SELECT a.员工,a.成绩,decode(a.打分人,b.打分人,COUNT(*),0),b.打分人 FROM table a,table b GROUP BY a.员工,a.成绩,b.打分人,a.打分人 ORDER BY a.员工;

注:我已经验证通过,希望能帮助你
  相关解决方案