tipos tablas resueltos relacionadas ejercicios ejemplos consultas consultar consulta concatenar complejas sql join ms-jet-ace

tablas - consultas sql pdf



datos de suma sql de varias tablas (6)

Los resultados de su consulta son incorrectos porque los valores que intenta resumir se agrupan, lo que hace que los valores duplicados se incluyan en la SUM .

Podrías resolverlo con un par de sub-selects:

SELECT AP1.[PROJECT], (SELECT SUM(AP2.Value) FROM AP AS AP2 WHERE AP2.PROJECT = AP1.PROJECT) AS SUM_AP, (SELECT SUM(INV2.Value) FROM INV AS INV2 WHERE INV2.PROJECT = AP1.PROJECT) AS SUM_INV FROM AP AS AP1 INNER JOIN INV AS INV1 ON (AP1.[PROJECT] =INV1.[PROJECT]) WHERE AP1.[PROJECT] = ''XXXXX'' GROUP BY AP1.[PROJECT]

Tengo 2 tablas AP e INV donde ambas tienen las columnas [PROYECTO] y [Valor].

Quiero una consulta para devolver algo como esto:

PROYECTO | SUM_AP | SUM_INV

Se me ocurrió el siguiente código pero está devolviendo los resultados incorrectos (la suma es incorrecta).

SELECT AP.[PROJECT], SUM(AP.Value) AS SUM_AP, SUM(INV.Value) AS SUM_INV FROM AP INNER JOIN INV ON (AP.[PROJECT] =INV.[PROJECT]) WHERE AP.[PROJECT] = ''XXXXX'' GROUP BY AP.[PROJECT]


Podrías separar los dos cálculos de suma. Una manera en que puedo pensar es mover el cálculo de inventario a una subconsulta, como:

SELECT AP.[PROJECT] , SUM(AP.Value) AS SUM_AP , SummedInv as SUM_INV FROM AP LEFT JOIN ( SELECT PROJECT, SUM(Value) AS SUM_INV FROM INV GROUP BY PROJECT ) SummedInv ON SummedInv.Project = AP.Project GROUP BY AP.PROJECT, SummedInv.SUM_INV

Debido a que la subconsulta SummedInv está agrupada en el project , también es seguro agrupar en SummedInv.SUM_INV en la consulta externa.


Si PROJECT es la tabla principal, debe seleccionar FROM de la tabla del proyecto y hacer una combinación externa izquierda en las dos tablas secundarias:

SELECT PROJECT.PROJECT_ID, SUM(AP.Value) AS SUM_AP, SUM(INV.Value) AS SUM_INV FROM PROJECT LEFT OUTER JOIN AP ON (AP.[PROJECT] = PROJECT.[PROJECT_ID]) LEFT OUTER JOIN INV ON (INV.[PROJECT] = PROJECT.[PROJECT_ID]) WHERE PROJECT.[PROJECT_ID] = ''XXXXX'' GROUP BY PROJECT.[PROJECT_ID]


Si tiene N filas en AP con una ID de proyecto determinada y M filas en INV con esa ID, entonces la unión entre las dos tablas en la ID de proyecto tendrá un total de N*M filas para ese proyecto, porque la misma fila en AP se repetirá por cada fila en INV que tenga esa ID de proyecto, y viceversa. Por lo tanto, es probable que sus recuentos estén desactivados (porque está contando la misma fila en una tabla dada varias veces debido a la repetición de la unión).

En su lugar, puede intentar hacer una combinación entre los resultados de dos subconsultas, una que agrupa la primera tabla por ID de proyecto y la suma, y ​​la segunda que agrupa la otra tabla por ID de proyecto y hace esa suma, luego unirse una vez que solo tiene 1 fila con suma para cada ID de proyecto.


Tratar:

SELECT AP.[PROJECT] AS PROJECT, SUM(AP.[Value]) AS SUM_AP, SUM(INV.[Value]) AS SUM_INV FROM AP, INV WHERE AP.[PROJECT] = INV.[PROJECT] AND AP.[PROJECT] = ''XXXXX'' GROUP BY AP.[PROJECT]


¿Qué tal esta consulta?

select SUM(gpCutBody.actualQty) as cutQty , SUM(gpSewBody.quantity) as sewQty from jobOrder inner join gpCutHead on gpCutHead.joNum = jobOrder.joNum inner join gpSewHead on gpSewHead.joNum = jobOrder.joNum inner join gpCutBody on gpCutBody.gpCutID = gpCutHead.gpCutID inner join gpSewBody on gpSewBody.gpSewID = gpSewHead.gpSewID where jobOrder.joNum = ''36''

aquí está el enlace al ERD: http://dl.dropbox.com/u/18794525/AUG%207%20DUMP%20STAN.png