Valores Null a 0 en consulta access

Estoy haciendo una consulta cruzada de access para que me muestre por linea cuantos fueron los montos pedidos año a año.
El problema es que cuando no me encuentra montos en ningún año la consulta omite poner la Linea.
Yo quisiera que más allá de si allá pedidos o no aparezcan todas las lineas aunque queden vacías o con 0.
Tengo entendido que para esto tengo que reemplazar los Null por 0 para que tenga un valor la linea y aparezca.
Pero no se exactamente como hacerlo! Les dejo lo que tengo por ahora:
Código:
TRANSFORM Sum([Logistica total].Monto) AS SumaDeMonto
SELECT [Logistica total].País, [Logistica total].Línea, Sum([Logistica total].Monto) AS [Total de Monto]
FROM [Logistica total]
GROUP BY [Logistica total].País, [Logistica total].Línea
PIVOT Format([Fecha de embarque real],"yyyy") & [Estado];

1 respuesta

Respuesta
1
Si y no.
Existe una función para reemplazar los Nulos por el valor que tu quieras (0 o cualquier otra cosa). La función es Nz([valor a evaluar], [valor en caso de nulo]).
Pero eso no puede aplicarse a una consulta de referencias cruzadas puesto que si no existe ningún valor para mostrar en una línea... simplemente es que no existe y eso es aun menos que nulo.
Ahora bien, me parece que tienes un pequeño error de concepto. Creo que, lo que no te muestra son las columnas, ¿cierto?
Si es asi, te basta con "forzar" a que las columnas sean fijas. Para ello tienes una propiedad en la consulta llamada Encabezados de columna, dónde puedes definir los valores que, si o si, se mostraran (existan o no valores de Monto para esa columna). Los valores de los encabezados van separados por ;
Al final, la SQL debe quedar con una clausula PIVOT parecida a esta (es un ejemplo de meses)
PIVOT tabla.mes In (1;2;3;4;5;6;7;8;9;10;11;12);
Experto, creo que estamos cerca!
La cuestión es que no son las columnas lo que quiero forzar, sino las filas.
LINEA --- Año 2008 -- Año 2009 - Año 2010
Herramientas eléctricas
Soldadoras
Lámparas
Lo que necesito que aparezcan son todas las lineas... que son como 20 por ejemplo.. y solo aparecen si hay algún valor en algún año.. pero si no hay se omiten.. y pueden llegar a aparecer solo 3 de las 20 que hay!
Tendría qué "forzar! pero las filas! Como puede hacerse esto?
Las filas no se pueden forzar. Tendrás que pensar otra táctica (¿una tabla temporal, tal vez?)
Tiene que haber una forma...
Aunque no sea forzándola... algo para que me marque todas las lineas (por eso pensé en ponerle que si el valor es Null me de cero, para que así aparezca un monto y por ende la linea).
Pero alguna manera tiene que haber, creo que debe ser algo bastante normal lo que quiero hacer yo. ¿Qué sugieres?
Lo que pides no es tan raro, lo que ocurre es que no existe una forma fácil de solucionarlo.
Puede que la más sencilla sea generar "movimientos 0" para cada una de las lineas. De esa forma te aseguras que, por lo menos, se encuentre un valor para cada campo que llamas LINEA.
El proceso para hacer eso lo lanzarías justo antes de pedir la consulta.
Se trata de recorrer la tabla que contenga los valores de LINEA y mirar si, por cada registro, existe algún movimiento en la tabla Logística Total para esa LINEA.
Si no existe, lanza una consulta de inserción sobre la tabla Logística Total e inserta ese registro a valor 0.
Una vez tengas eso, la consulta de referencias cruzadas te debería devolver todos los registros de LINEA, tenga o no movimientos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas