在下一列中重用由条件聚合组成的列

  • 本文关键字:条件 一列 sql sql-server
  • 更新时间 :
  • 英文 :


对' taps '执行的条件聚合与对下一列使用的条件聚合相同。有没有一种方法可以取前一个的值而不需要重写所有的东西?

select 
idComedor      = IdComedor
, total = SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end)
, cajas = SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end)%12
, tapers = SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end)/12
, cajasNeto = CASE WHEN SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end)/12> 0 THEN 
SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end)%12 + 1 ELSE 
SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end)%12 END
, tachos =  CEILING(SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')   then Cantidad else 0 end)*0.9/45)
from dbo.vSolDistrib
where idlocalidad = 2 and FechaPedido = '2022.05.26'
group by IdComedor

可以使用像这样的子查询

select  t.IdComedor  
,total = t.calcsum
,cajas = t.calcsum % 12
,tapers = t.calcsum / 12
,cajasNeto = CASE WHEN t.calcsum / 12 > 0 THEN t.calcsum % 12 + 1 
ELSE t.calcsum % 12 
END
,tachos =  CEILING(t.calcsum * 0.9 / 45)
from  (select idComedor = IdComedor
,SUM(case when NombreArea in ('APLICACIONES','ARANDANOS','PALTO')  then Cantidad else 0 end) as calcsum
from   dbo.vSolDistrib
where  idlocalidad = 2 and FechaPedido = '2022.05.26'
group by IdComedor
) t 

DBFiddle在这里,你可以填充数据来测试它是否像你想要的那样工作

相关内容

  • 没有找到相关文章

最新更新