对' 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在这里,你可以填充数据来测试它是否像你想要的那样工作