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
简化你的问题。