totalizar valores, con 3 tablas!!

01/12/2007 - 04:40 por Oscar | Informe spam
Hola a todos,

he aquí mi problema->

Tengo tres tablas:

1.- Distribuidores: Tabla con Distribuidores y Cadenas
2.- Altas: Tabla con altas dedistribuidores
3.- Almacen:Tabla con almacen de distribuidores


Necesito obtener como resultado una tabla con el nombre del distribuidor, el
nombre de la cadena, el número de unidades en almacen y el numero de altas de un
día.


Lo consigo por separado, es decir el número de altas por distribuidor en un día:

Stock en almacen por distribuidor y cadena:

SELECT SUM(ALMACEN.ALMUNIDADES) AS UNIDADES, DISTRIBUIDOR.DISCADENA AS
CADENA, DISTRIBUIDOR.DISNOMBRE AS DISTRIBUIDOR
FROM ALMACEN RIGHT OUTER JOIN
DISTRIBUIDOR ON ALMACEN.ALMDISTRIBUIDOR =
DISTRIBUIDOR.DISNOMBRE AND ALMACEN.ALMCADENA = DISTRIBUIDOR.DISCADENA
GROUP BY DISTRIBUIDOR.DISCADENA, DISTRIBUIDOR.DISNOMBRE

Altas por distribuidor y cadena:

SELECT DISTRIBUIDOR.DISCADENA AS CADENA, DISTRIBUIDOR.DISNOMBRE AS
DISTRIBUIDOR, COUNT(ALTASDETALLE.ALTID) AS ALTAS
FROM DISTRIBUIDOR LEFT OUTER JOIN
ALTASDETALLE ON DISTRIBUIDOR.DISNOMBRE =
ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA
GROUP BY DISTRIBUIDOR.DISCADENA, DISTRIBUIDOR.DISNOMBRE


Pero soy incapaz de varias cosas:

1.º Si intento sacar las altas de un solo día:

SELECT DISTRIBUIDOR.DISCADENA AS CADENA, DISTRIBUIDOR.DISNOMBRE AS
DISTRIBUIDOR, COUNT(ALTASDETALLE.ALTID) AS ALTAS
FROM DISTRIBUIDOR LEFT OUTER JOIN
ALTASDETALLE ON DISTRIBUIDOR.DISNOMBRE =
ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA
WHERE (ALTASDETALLE.ALTFECHA = CONVERT(DATETIME, '15/11/2007', 103))
GROUP BY DISTRIBUIDOR.DISCADENA, DISTRIBUIDOR.DISNOMBRE, ALTASDETALLE.ALTFECHA

en lugar de lo 30 distribuidores que tengo, obtengo solo 11, no me calcula 0
para aquellos que no tienen altas, pero si que me calcula 0 en la selección
anterior sin la condición de fecha!!

2-º Soy incapaz de unir las dos consultas y obtener una tabla con

DISTRIBUIDOR CADENA UNIDADES_ALMACEN ALTAS


algun consejo??

Muchas gracias.

Oscar.
 

Leer las respuestas

#1 Carlos M. Calvelo
01/12/2007 - 11:05 | Informe spam
Hola Oscar,

On 1 dec, 04:40, Oscar wrote:
Hola a todos,

he aquí mi problema->

Tengo tres tablas:

1.- Distribuidores: Tabla con Distribuidores y Cadenas
2.- Altas: Tabla con altas dedistribuidores
3.- Almacen:Tabla con almacen de distribuidores

Necesito obtener como resultado una tabla con el nombre del distribuidor, el
nombre de la cadena, el número de unidades en almacen y el numero de altas de un
día.

Lo consigo por separado, es decir el número de altas por distribuidor en un día:

Stock en almacen por distribuidor y cadena:

SELECT SUM(ALMACEN.ALMUNIDADES) AS UNIDADES, DISTRIBUIDOR.DISCADENA AS
CADENA, DISTRIBUIDOR.DISNOMBRE AS DISTRIBUIDOR
FROM ALMACEN RIGHT OUTER JOIN
DISTRIBUIDOR ON ALMACEN.ALMDISTRIBUIDOR > DISTRIBUIDOR.DISNOMBRE AND ALMACEN.ALMCADENA = DISTRIBUIDOR.DISCADENA
GROUP BY DISTRIBUIDOR.DISCADENA, DISTRIBUIDOR.DISNOMBRE

Altas por distribuidor y cadena:

SELECT DISTRIBUIDOR.DISCADENA AS CADENA, DISTRIBUIDOR.DISNOMBRE AS
DISTRIBUIDOR, COUNT(ALTASDETALLE.ALTID) AS ALTAS
FROM DISTRIBUIDOR LEFT OUTER JOIN
ALTASDETALLE ON DISTRIBUIDOR.DISNOMBRE > ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA
GROUP BY DISTRIBUIDOR.DISCADENA, DISTRIBUIDOR.DISNOMBRE

Pero soy incapaz de varias cosas:

1.º Si intento sacar las altas de un solo día:

SELECT DISTRIBUIDOR.DISCADENA AS CADENA, DISTRIBUIDOR.DISNOMBRE AS
DISTRIBUIDOR, COUNT(ALTASDETALLE.ALTID) AS ALTAS
FROM DISTRIBUIDOR LEFT OUTER JOIN
ALTASDETALLE ON DISTRIBUIDOR.DISNOMBRE > ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA
WHERE (ALTASDETALLE.ALTFECHA = CONVERT(DATETIME, '15/11/2007', 103))
GROUP BY DISTRIBUIDOR.DISCADENA, DISTRIBUIDOR.DISNOMBRE, ALTASDETALLE.ALTFECHA

en lugar de lo 30 distribuidores que tengo, obtengo solo 11, no me calcula 0
para aquellos que no tienen altas, pero si que me calcula 0 en la selección
anterior sin la condición de fecha!!



Pasa la condición del where al join:

...
FROM DISTRIBUIDOR LEFT OUTER JOIN ALTASDETALLE
ON DISTRIBUIDOR.DISNOMBRE = ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA AND
ALTASDETALLE.ALTFECHA = CONVERT(DATETIME, '15/11/2007', 103)
...



2-º Soy incapaz de unir las dos consultas y obtener una tabla con

DISTRIBUIDOR CADENA UNIDADES_ALMACEN ALTAS

algun consejo??



A ver si haciendo este join va la cosa:

FROM ( ALMACEN RIGHT OUTER JOIN DISTRIBUIDOR
ON ALMACEN.ALMDISTRIBUIDOR = DISTRIBUIDOR.DISNOMBRE AND
ALMACEN.ALMCADENA = DISTRIBUIDOR.DISCADENA )
LEFT OUTER JOIN ALTASDETALLE
ON DISTRIBUIDOR.DISNOMBRE = ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA

Espero haber entendido bien tu problema.

Saludos,
Carlos

Preguntas similares