员工 成绩 打分人
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.员工;
注:我已经验证通过,希望能帮助你