2016-04-30 87 views
-1

我相信可以优化这个sql-server查询。我试图使用一个外部连接没有结果。任何人都可以帮助我优化这个查询吗?OPTIMIZE UNION SQL QUERY

SELECT '1' AS CodigoEmpresa, 
     T0.CodigoAlmacen, 
     '' AS CodigoUbicacion, 
     T0.CodigoArticulo, 
     T0.Partida, 
     CAST(T0.Unidades - ISNULL(T1.Unidades, 0) AS float) AS Unidades, 
     T0.FechaCaduca 
FROM dbo.ERP_Stock_Entrada_FINAL AS T0 
LEFT JOIN dbo.ERP_Stock_Salida_FINAL AS T1 ON T0.CodigoArticulo = T1.CodigoArticulo 
AND T0.Partida = T1.Partida 
AND T0.CodigoAlmacen = T1.CodigoAlmacen 
UNION 
SELECT '1' AS CodigoEmpresa, 
     T0.CodigoAlmacen, 
     '' AS CodigoUbicacion, 
     T0.CodigoArticulo, 
     T0.Partida, 
     CAST(ISNULL(T1.Unidades,0)-T0.Unidades AS FLOAT) AS Unidades, 
     T0.Fechacaduca 
FROM ERP_Stock_Salida_Final AS T0 
LEFT JOIN dbo.ERP_Stock_Entrada_FINAL AS T1 ON T0.CodigoArticulo = T1.CodigoArticulo 
AND T0.Partida = T1.Partida 
AND T0.CodigoAlmacen = T1.CodigoAlmacen 
+1

请必须在格式化这个问题是可读的一个bash –

+1

你实际上意味着'union'而不是'工会all' ? – GSerg

+0

请用你正在使用的数据库标记你的问题。 –

回答

1

从我可以告诉,你想要一个FULL OUTER JOIN

SELECT '1' AS CodigoEmpresa, 
     COALESCE(T0.CodigoAlmacen, T1.CodigoAlmacen) as CodigoAlmacen 
     '' AS CodigoUbicacion, 
     COALESCE(T0.CodigoArticulo, T1.CodigoArticulo) as CodigoArticulo 
     COALESCE(T0.Partida, T1.Partida) as Partida 
     CAST(COALESCE(T0.Unidades, 0) - COALESCE(T1.Unidades, 0) AS float) AS Unidades, 
     COALESCE(T0.FechaCaduca, T1.FechaCaduca) as FechaCaduca 
FROM dbo.ERP_Stock_Entrada_FINAL T0 FULL JOIN 
    dbo.ERP_Stock_Salida_FINAL T1 
    ON T0.CodigoArticulo = T1.CodigoArticulo AND 
     T0.Partida = T1.Partida AND 
     T0.CodigoAlmacen = T1.CodigoAlmacen;