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.

Preguntas similare

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
Respuesta Responder a este mensaje
#2 Oscar
01/12/2007 - 14:42 | Informe spam
Hola Carlos, cuanta actividad tienes!! ;)

En cuanto al primer punto, perfecto me ha servido.

Con el segundo obtengo los mismos malos resultados... :(

La consulta que he utilizado es:

SELECT DISTRIBUIDOR.DISNOMBRE, DISTRIBUIDOR.DISCADENA,
COUNT(ALTASDETALLE.ALTID) AS ALTAS, SUM(ALMACEN.ALMUNIDADES)
AS UNIDADES
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
GROUP BY DISTRIBUIDOR.DISNOMBRE, DISTRIBUIDOR.DISCADENA

Con esto obtengo como resultado el mismoo en altas y en unidades, un numero
completamente fuera de la realidad (debe ser algún extraño producto entre numero
de celdas coincidentes)

Sigo intentandolo

Saludos y muchas gracias

Carlos M. Calvelo escribió:
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

Respuesta Responder a este mensaje
#3 Oscar
01/12/2007 - 14:52 | Informe spam
Una solución que encentro es la siguiente:

Vista1 -> Altas por Distribuidor y Cadena

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



Vista2 -> Stock por Distribuidor y Cadena

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



Vista conjunta:

SELECT dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.UNIDADES,
dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA.ALTAS,
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.CADENA,
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.DISTRIBUIDOR
FROM dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI LEFT OUTER JOIN
dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA ON
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.CADENA =
dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA.CADENA AND
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.DISTRIBUIDOR =
dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA.DISTRIBUIDOR



Y asi obtengo justo lo que estoy buscando... una tabla con el nombre del
distribuidor, de la cadena y el total de unidades que tiene el almacen y el
total de altas del dia 15...

el problema, que no se como hacer para añadir que la condición del día sea
variable... es decir, que pueda elegir el día o intervalo de días en los que
realizar la consulta

:(

Al final, no me quedará otra que realizar la tabla de manera dinámica, a través
de los dos select primeros, y hacer una tabla html a pelo... snif snif...


Carlos M. Calvelo escribió:
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

Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
01/12/2007 - 15:19 | Informe spam
Hola Oscar,

On 1 dec, 14:42, Oscar wrote:
Hola Carlos, cuanta actividad tienes!! ;)




Eso se da asi de forma esporádica. :)


En cuanto al primer punto, perfecto me ha servido.

Con el segundo obtengo los mismos malos resultados... :(

La consulta que he utilizado es:

SELECT DISTRIBUIDOR.DISNOMBRE, DISTRIBUIDOR.DISCADENA,
COUNT(ALTASDETALLE.ALTID) AS ALTAS, SUM(ALMACEN.ALMUNIDADES)
AS UNIDADES
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
GROUP BY DISTRIBUIDOR.DISNOMBRE, DISTRIBUIDOR.DISCADENA

Con esto obtengo como resultado el mismoo en altas y en unidades, un numero
completamente fuera de la realidad (debe ser algún extraño producto entre numero
de celdas coincidentes)




Pues prueba esto:

SELECT ALM.DISNOMBRE, ALM.DISCADENA, ALM.UNIDADES, ALT.ALTAS
FROM
(
SELECT DISTRIBUIDOR.DISNOMBRE AS DISNOMBRE,
DISTRIBUIDOR.DISCADENA AS DISCADENA,
SUM(ALMACEN.ALMUNIDADES) AS UNIDADES
FROM DISTRIBUIDOR
LEFT OUTER JOIN
ALMACEN
ON DISTRIBUIDOR.DISNOMBRE = ALMACEN.ALMDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALMACEN.ALMCADENA
GROUP BY DISTRIBUIDOR.DISNOMBRE, DISTRIBUIDOR.DISCADENA
) AS ALM
INNER JOIN
(
SELECT DISTRIBUIDOR.DISNOMBRE AS DISNOMBRE,
DISTRIBUIDOR.DISCADENA AS DISCADENA,
COUNT(ALTASDETALLE.ALTID) AS ALTAS,
FROM DISTRIBUIDOR
LEFT OUTER JOIN
ALTASDETALLE
ON DISTRIBUIDOR.DISNOMBRE = ALTASDETALLE.ALTDISTRIBUIDOR AND
DISTRIBUIDOR.DISCADENA = ALTASDETALLE.ALTCADENA
GROUP BY DISTRIBUIDOR.DISNOMBRE, DISTRIBUIDOR.DISCADENA
) AS ALT
ON ALM.DISNOMBRE = ALT.DISNOMBRE AND
ALM.DISCADENA = ALT.DISCADENA

Saludos,
Carlos
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
01/12/2007 - 16:32 | Informe spam
Hola Oscar,

On 1 dec, 14:52, Oscar wrote:
Una solución que encentro es la siguiente:

Vista1 -> Altas por Distribuidor y Cadena

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

Vista2 -> Stock por Distribuidor y Cadena

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

Vista conjunta:

SELECT dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.UNIDADES,
dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA.ALTAS,
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.CADENA,
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.DISTRIBUIDOR
FROM dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI LEFT OUTER JOIN
dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA ON
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.CADENA > dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA.CADENA AND
dbo.VISTA_DISTRIBUIDOR_ALMACEN_UNI.DISTRIBUIDOR > dbo.VISTA_DISTRIBUIDOR_ALTAS_DIA.DISTRIBUIDOR

Y asi obtengo justo lo que estoy buscando... una tabla con el nombre del
distribuidor, de la cadena y el total de unidades que tiene el almacen y el
total de altas del dia 15...

el problema, que no se como hacer para añadir que la condición del día sea
variable... es decir, que pueda elegir el día o intervalo de días en los que
realizar la consulta

:(




Pues puedes, por ejemplo, crear un procedimiento almacenado al que
le pasas las dos fechas y en la condición del left join del select
que te he dado en el otro post pones:

... AND ALTASDETALLE.ALTFECHA BETWEEN @FECHAINICO AND @FECHAFIN ...

Donde tiene que estar esa consulta? En la aplicación? En la base
de datos? (vista o procedimiento almacenado?)


Al final, no me quedará otra que realizar la tabla de manera dinámica, a través
de los dos select primeros, y hacer una tabla html a pelo... snif snif...




Esperemos que no llegen ahí las cosas :)

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida