可以简化这个SQL吗?

可以简化这个SQL吗?,sql,sql-server,Sql,Sql Server,可以简化这个SQL吗?还是它很好 select c.codigo, c.nome, coalesce(sum(a.vlcompra), 0) as total_client, sum(coalesce(sum(a.vlcompra), 0)) over(order by coalesce(sum(a.vlcompra), 0) desc) running_total, (select sum(vlcompra) from acumterc where tpte

可以简化这个SQL吗?还是它很好

select 
  c.codigo, 
  c.nome,  
  coalesce(sum(a.vlcompra), 0) as total_client,
  sum(coalesce(sum(a.vlcompra), 0)) over(order by coalesce(sum(a.vlcompra), 0) desc) running_total,
  (select sum(vlcompra) from acumterc    where  tpterc = 2  and tpoper = 2  and ano = 2018 ) as total,
  coalesce(sum(a.vlcompra), 0) * 100 / (select sum(vlcompra) from acumterc    where  tpterc = 2  and 
  tpoper = 2  and ano = 2018 ) as perc1,
  sum(coalesce(sum(a.vlcompra), 0)) over(order by coalesce(sum(a.vlcompra), 0) desc) * 100 / (select 
  sum(vlcompra) from acumterc    where  tpterc = 2  and tpoper = 2  and ano = 2018 ) as perc2
from clientes c
left join acumterc a on a.tpterc = 2 
  and a.tpoper = 2 
  and a.terceiro = c.codigo
  and a.ano = 2018
group by c.codigo, c.nome
样本数据:

codigo nome        vlcompra      ano           tpoper  tpterc
--     --------    ------------  ------------- ------ ------ 
45     nome1       40            2018           2       2       
45     nome1       60            2018           2       2    
23     nome2       100           2018           2       2    
23     nome2       100           2018           2       2   
23     nome2       100           2018           2       2   
12     nome3       500           2018           2       2    
12     nome3       100           2018           2       2  
12     nome3       100           2019           2       2    
我得到了期望的结果:

codigo nome        total_client  running_total total  perc1  perc2
--     --------    ------------  ------------- ------ ------ ------
45     nome1       100           100           1000   10%    10%   
23     nome2       300           400           1000   30%    40%
12     nome3       600           1000          1000   60%    100%
其中:total=sumtotal\u client->perc1和perc2计算的辅助列

   perc1 = porcentage of total_client over total
   perc2 = porcentage of running_total over total

就个人而言,我会尝试这样做来提高绩效

DECLARE @Total MONEY
SELECT @Total=sum(vlcompra) from acumterc    where  tpterc = 2  and tpoper = 2  and ano = 2018

select 
c.codigo, 
c.nome,  
coalesce(sum(a.vlcompra), 0) as total_client,
sum(coalesce(sum(a.vlcompra), 0)) over(order by coalesce(sum(a.vlcompra), 0) desc) running_total,
@Total as total,
coalesce(sum(a.vlcompra), 0) * 100 / @Total as perc1,
sum(coalesce(sum(a.vlcompra), 0)) over(order by coalesce(sum(a.vlcompra), 0) desc) * 100 / (@Total) as perc2
from clientes c
left join acumterc a 
    on  a.tpterc = 2 
    and a.tpoper = 2 
    and a.terceiro = c.codigo
    and a.ano = 2018
group by c.codigo, c.nome

您应该提供示例数据、所需结果、逻辑解释和适当的数据库标记。太好了。谢谢。