我有这个查询
select
T1.local,
m.Nombre as Marca,
T1.NombreLinea as Linea ,
case when T1.IdComprobanteTipo in (21,23,26,28) then 0 else -sum(T1.Cantidad) end as Cantidad,
case when T1.IdComprobanteTipo in (21,23,26,28)
--toma en cuenta los descuentos de las facturas que fueron anuladas
then T1.TotalNeto
else isnull(T1.ImporteNeto,0) - isnull((select sum(importe) as importe
from GrimPosCon..Fact_Descuento (nolock) DD
where DD.IdComprobante = T1.idComprobante and T1.IdDim_Producto = IdDim_Producto
and T1.IdDim_Medida = IdDim_Medida and T1.IdDim_Calidad = IdDim_Calidad
and exists
(
select 1
from GrimPosCon..ComprobanteReferencias (nolock) AA
inner join GrimPosCon..Fact_Comprobante (nolock) BB on aa.IdComprobanteCredito = BB.IdComprobante
where AA.IdComprobanteDebito = DD.IdComprobante
and BB.IdDim_ComprobanteTipo in (4,13,16,19)
)
),0) end as IMPORTE,
T1.NombreFamilia as Familia
from
#Query T1
inner join GrimPosCon..Dim_Marca(nolock) m on m.IdDim_Marca = T1.IDDim_Marca
Group by
T1.local, m.Nombre,T1.NombreLinea,T1.NombreFamilia,T1.TotalNeto,T1.IdComprobante, T1.IdDim_producto,
T1.idDim_Medida,T1.ImporteNeto,T1.IdComprobanteTipo,T1.IdDim_Calidad
我想删除最大的子查询。
我尝试Left Joins where is not null
,但它给了我不同的结果。
我该如何修改?
我想要相同的结果,但使用一些连接,或者比该子查询更快的东西。根据执行计划,该子查询占用总查询的%35,并且在运行所有查询时花费将近50秒
答案 0 :(得分:0)
您可以尝试此查询:
select
T1.local,
m.Nombre as Marca,
T1.NombreLinea as Linea ,
case when T1.IdComprobanteTipo in (21,23,26,28) then 0 else -sum(T1.Cantidad) end as Cantidad,
case when T1.IdComprobanteTipo in (21,23,26,28)
--toma en cuenta los descuentos de las facturas que fueron anuladas
then T1.TotalNeto
else isnull(T1.ImporteNeto,0) - isnull(DD.importe,0)
end as IMPORTE,
T1.NombreFamilia as Familia
from
#Query T1
inner join
GrimPosCon..Dim_Marca(nolock) m on m.IdDim_Marca = T1.IDDim_Marca
left join
(
select
CC.IdComprobante,
CC.IdDim_Producto,
CC.IdDim_Medida,
CC.IdDim_Calidad,
sum(importe) as importe
from
GrimPosCon..Fact_Descuento (nolock) CC
where
exists
(
select 1
from
GrimPosCon..ComprobanteReferencias (nolock) AA
inner join
GrimPosCon..Fact_Comprobante (nolock) BB on aa.IdComprobanteCredito = BB.IdComprobante
where
AA.IdComprobanteDebito = CC.IdComprobante
and
BB.IdDim_ComprobanteTipo in (4,13,16,19)
)
group by
DD.IdComprobante,
DD.IdDim_Producto,
DD.IdDim_Medida,
DD.IdDim_Calidad
) as DD on
DD.IdComprobante = T1.idComprobante
and
DD.IdDim_Producto = T1.IdDim_Producto
and
DD.IdDim_Medida = T1.IdDim_Medida
and
DD.IdDim_Calidad = T1.IdDim_Calidad
Group by
T1.local, m.Nombre,T1.NombreLinea,T1.NombreFamilia,T1.TotalNeto,T1.IdComprobante, T1.IdDim_producto,
T1.idDim_Medida,T1.ImporteNeto,T1.IdComprobanteTipo,T1.IdDim_Calidad,DD.importe
根据您的数据,它可能会运行得更快或更慢。