Una sola select o tabla temporal

26/01/2008 - 13:29 por LuisMiguel | Informe spam
Buenas
Utilizo estas dos tablas en SQLServer2000

AlbaCliCab
* CodAlbaran Varchar(10)
* CodCliente varchar(10)
* Fecha datetime

AlbaCliLin
* CodAlbaran varchar(10)
* Linea smallint
* CodArticulo varchar(10)
* Importe decimal(10,2)

relacionadas por el CodAlbaran

necesito obtener los albaranes con los siguientes limites:
entre codigos de clientes
entre fechas
entre articulos
y que el total del albaran este entre unos importes

que seria mas optimo, crear una tabla temporal leyendo de la Cabecera los
albaranes que cumplen las 2 primeras condiciones y posteriormente relacionar
la tabla temporal con las lineas

Gracias
LuisMiguel

Preguntas similare

Leer las respuestas

#6 Carlos M. Calvelo
27/01/2008 - 23:02 | Informe spam
Hola otra vez,


    (SELECT COUNT(*)
     FROM   AlbacliLin
     WHERE  CodAlbaran = C.CodAlbaran AND
            CodArticulo BETWEEN @DeArticulo AND @HaArticulo
    ) > 0



En el WHERE puedes cambiar esta subconsulta por:

EXISTS
(SELECT *
FROM AlbacliLin
WHERE CodAlbaran = C.CodAlbaran AND
CodArticulo BETWEEN @DeArticulo AND @HaArticulo
)

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Carlos M. Calvelo
27/01/2008 - 23:53 | Informe spam
Hola LuisMiguel,

Acabo de darme cuenta que también quieres el número de lineas
en un albarán con artículo en el rango de artículos dado.

Ahí va:

SELECT A.CodAlbaran, A.Total, B.NumeroDeLineas
FROM
(
SELECT C.CodAlbaran, SUM(L.Importe) as Total
FROM Albaclicab C
LEFT JOIN AlbacliLin L ON C.CodAlbaran=L.CodAlbaran
WHERE C.CodCliente BETWEEN @DeCliente AND @HaCliente AND
C.Fecha BETWEEN @DeFecha AND @HaFecha
GROUP BY C.CodAlbaran
HAVING SUM(L.Importe) BETWEEN @DeImporte AND @HaImporte
) A
INNER JOIN
(
SELECT CodAlbaran, COUNT(*) AS NumeroDeLineas
FROM AlbacliLin
WHERE CodArticulo BETWEEN @DeArticulo AND @HaArticulo
GROUP BY CodAlbaran
HAVING COUNT(*) > 0
) B
ON A.CodAlbaran = B.CodAlbaran

No me digas que no tienes opciones para elegir :)

Saludos,
Carlos
Respuesta Responder a este mensaje
#8 LuisMiguel
28/01/2008 - 16:49 | Informe spam
gracias por todo carlos
el numero de lineas era solo para saber si habia articulos o no
gracias de nuevo

LuisMiguel
"Carlos M. Calvelo" escribió en el mensaje
news:
Hola LuisMiguel,

Acabo de darme cuenta que también quieres el número de lineas
en un albarán con artículo en el rango de artículos dado.

Ahí va:

SELECT A.CodAlbaran, A.Total, B.NumeroDeLineas
FROM
(
SELECT C.CodAlbaran, SUM(L.Importe) as Total
FROM Albaclicab C
LEFT JOIN AlbacliLin L ON C.CodAlbaran=L.CodAlbaran
WHERE C.CodCliente BETWEEN @DeCliente AND @HaCliente AND
C.Fecha BETWEEN @DeFecha AND @HaFecha
GROUP BY C.CodAlbaran
HAVING SUM(L.Importe) BETWEEN @DeImporte AND @HaImporte
) A
INNER JOIN
(
SELECT CodAlbaran, COUNT(*) AS NumeroDeLineas
FROM AlbacliLin
WHERE CodArticulo BETWEEN @DeArticulo AND @HaArticulo
GROUP BY CodAlbaran
HAVING COUNT(*) > 0
) B
ON A.CodAlbaran = B.CodAlbaran

No me digas que no tienes opciones para elegir :)

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida