Access 2007 - Left Join a una consulta devuelve #Error en lugar de Null
Similar a esta pregunta, pero su problema con la consulta nunca se resolvió completamente:
Aparece #Error cuando espero ver un Null cuando hago una combinación a la izquierda donde no hay un registro correspondiente en el lado derecho de la combinación:
Chain CasesPerMonthPerStore MonthOfFirstOrder
Naturally 2.3 5/1/2011
Tom's Market #Error
Livingstons #Error
EverClear 3.1 7/1/2012
Bob's Market 2.66 5/1/2012
Andy's Exports #Error
Jamestowns 0.89 7/1/2012
Funciona bien si copio los datos en una tabla y me voy a unir a esta tabla, así que asumo que hay algo incorrecto en la sintaxis de la consulta:
SELECT
MonthRange.Chain,
MonthRange.CasesShipped/IIf(MonthsSinceFirstOrder.Months>DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1,
DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1,
MonthsSinceFirstOrder.Months)/NumStores.NumberOfStores AS CasesPerMonthPerStore,
MonthsSinceFirstOrder.MonthOfFirstOrder
FROM
QueryDates,
(
MonthRange
INNER JOIN
NumStores
ON MonthRange.Chain=NumStores.Chain
)
INNER JOIN
MonthsSinceFirstOrder
ON MonthRange.Chain=MonthsSinceFirstOrder.Chain;
Este SQL devuelve los resultados correctos, es solo su comportamiento cuando se une a ella lo que está devolviendo #Errors.
nb la extraña declaración Iif en el medio verifica si el número de meses desde la primera orden es mayor que el número de meses incluidos en el rango de fechas especificado, por lo tanto, si el rango de fechas es de 6 meses y la primera orden fue de 9 meses antes la fecha de finalización, utiliza 6; si el primer pedido fue solo 4 meses antes de la fecha de finalización, usa 4.
- ACTUALIZAR EDITAR -
A la derecha, tomé los elementos de la consulta uno por uno, y esto es lo más sencillo que puedo obtener al mismo tiempo que recrea el error de unión a la izquierda:
SELECT
MonthRange.Chain,
DateDiff("m",QueryDates.StartDate,QueryDates.EndDate)+1 AS CasesPerMonthPerStore
FROM
QueryDates,
MonthRange;
Y así es como me voy uniendo a ello:
SELECT
Chains.Chain,
ErrorQuery.CasesPerMonthPerStore
FROM
Chains
LEFT JOIN
ErrorQuery
ON Chains.Chain=ErrorQuery.Chain;
¿Alguna cosa en este SQL se ve mal?