2016-04-30 183 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;