Sql 如何在select查询中使用别名将它们相加并排序
我有以下疑问。我想使用别名并将它们添加到一起并进行排名,但我不知道如何在子查询中执行此操作,请帮助我Sql 如何在select查询中使用别名将它们相加并排序,sql,Sql,我有以下疑问。我想使用别名并将它们添加到一起并进行排名,但我不知道如何在子查询中执行此操作,请帮助我 select (select dep_name from dep where dep_no=a.ac_deptno) dep, (select job_name from job where job_no=a.job_no) job, (select emp_name from emp where emp_no=a.emp_no) emp, (sum(case when b.bus
select
(select dep_name from dep where dep_no=a.ac_deptno) dep,
(select job_name from job where job_no=a.job_no) job,
(select emp_name from emp where emp_no=a.emp_no) emp,
(sum(case when b.business='1' then a.app_score1 else 0 end))*0.2 dog1,
(sum(case when b.business='1' then a.app_score2 else 0 end))*0.2 dog2,
--dogscore = dog1+dog2
(sum(case when b.business='2' then a.app_score1 else 0 end))*0.25 cat1,
(sum(case when b.business='2' then a.app_score2 else 0 end))*0.25 cat2,
--catscore = cat1+cat2
(sum(case when b.business='3' then a.app_score1 else 0 end))*0.25 fish1,
(sum(case when b.business='3' then a.app_score2 else 0 end))*0.25 fish2,
--fishscore = fish1+fish2
--empscore : dogscore + catscore + fishscore,
--emprank : rank accordance with empscore
--depscore : the same emp sum(empscore)
(select people from peotable where org_id=b.org_id and set_ym=c.give_ym2 and dep_no=a.ac_deptno) peaple
--depPerformance : depscore/peaple
--deprank :rank accordance with depPerformance
from dbft03 a , dbft01 b , dcft01 c
where a.dbft01_id=b.id
and b.do_deptno=c.do_deptno
and b.do_sno=c.do_sno
and b.org_id='0000' and c.proc_result_1='2'
and (c.give_ym2='YYYMM' or c.give_ym1='YYYMM' )
and a.rec_type='2'
group by b.org_id,a.ac_deptno,a.job_no ,a.emp_no,c.give_ym2
order by b.org_id,a.ac_deptno,a.job_no,a.emp_no
如果其他一切都正确且工作正常,则可以使用
cte
进行此操作
; with cte as (
select
(select dep_name from dep where dep_no=a.ac_deptno) dep,
(select job_name from job where job_no=a.job_no) job,
(select emp_name from emp where emp_no=a.emp_no) emp,
(sum(case when b.business='1' then a.app_score1 else 0 end))*0.2 dog1,
(sum(case when b.business='1' then a.app_score2 else 0 end))*0.2 dog2,
--dogscore = dog1+dog2
(sum(case when b.business='2' then a.app_score1 else 0 end))*0.25 cat1,
(sum(case when b.business='2' then a.app_score2 else 0 end))*0.25 cat2,
--catscore = cat1+cat2
(sum(case when b.business='3' then a.app_score1 else 0 end))*0.25 fish1,
(sum(case when b.business='3' then a.app_score2 else 0 end))*0.25 fish2,
--fishscore = fish1+fish2
--empscore : dogscore + catscore + fishscore,
--emprank : rank accordance with empscore
--depscore : the same emp sum(empscore)
(select people from peotable where org_id=b.org_id and set_ym=c.give_ym2 and dep_no=a.ac_deptno) peaple
--depPerformance : depscore/peaple
--deprank :rank accordance with depPerformance
from dbft03 a , dbft01 b , dcft01 c
where a.dbft01_id=b.id
and b.do_deptno=c.do_deptno
and b.do_sno=c.do_sno
and b.org_id='0000' and c.proc_result_1='2'
and (c.give_ym2='YYYMM' or c.give_ym1='YYYMM' )
and a.rec_type='2'
group by b.org_id,a.ac_deptno,a.job_no ,a.emp_no,c.give_ym2)
select rank() over (partition by dep,job order by emp) as [rank], * from cte ---- here you have all the columns available for performing any action
order by b.org_id,a.ac_deptno,a.job_no,a.emp_no
简化你的问题。