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

#1 Alejandro Mesa
26/01/2008 - 21:33 | Informe spam
LuisMiguel,

Prueba los dos metodos y cuentanos cual resulta mas adecuado en tu caso.

gracias,
AMB

"LuisMiguel" wrote:

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




Respuesta Responder a este mensaje
#2 LuisMiguel
27/01/2008 - 11:31 | Informe spam
gracias por tu interes alejandro, lo que no se es si se podria hacer con
una sola select


LuisMiguel
"Alejandro Mesa" escribió en el
mensaje news:
LuisMiguel,

Prueba los dos metodos y cuentanos cual resulta mas adecuado en tu caso.

gracias,
AMB

"LuisMiguel" wrote:

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







Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
27/01/2008 - 12:15 | Informe spam
Hola LuisMiguel,

On 27 jan, 11:31, "LuisMiguel"
<MICORREOluismolinoARROBAtelefonicaPUNTOnet> wrote:
gracias por tu interes alejandro, lo que no se es si se podria hacer con
una sola select



Ah! Esa ya es otra pregunta. La respuesta de Alejando a al pregunta
anterior me pareció una de las mejores que he leído en este foro :)

Seguro que sí se podrá hacer en una sola consulta pero tu pregunta
es un poco ambigua con lo de los artículos.
Mira mi comentario mas abajo.


> "LuisMiguel" wrote:

>> 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





Vamos a ver: Dices que quieres obtener albaranes.
Códigos de cliente, fechas y totales de importes son atributos de
albaranes. Pero artículos no. Entonces yo entiendo que la consulta
que quieres es albaranes con cliente dentro de un determinado rango
de clientes, con fecha dentro de un determinado rango de fechas y
total de albaran dentro de un determinado rango de totales de
albaranes.

Pero, qué hacemos con el rango de artículos?
Un abarán tiene un 'total de importe' pero no 'un artículo'.
O te refieres con 'total del albaran' a la suma de los importes
de solo aquellos artículos dentro del rango de artículos dado?

O quieres aquellos albaranes que tengan 'al menos' un articulo
dentro de ese rango?

Resumiendo, qué significa:
'albaranes con los siguientes límites: - entre artículos' ?

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 LuisMiguel
27/01/2008 - 21:37 | Informe spam
Hola Carlos
primeramente excusas por mi mala explicacion
Limites de Articulos, que las lineas del albaran, contengan algun articulo
del rango especificado

con la tabla temporal lo tengo enfocado asi:

create table #Albaranes (CodAlbaran varchar(20) not null, TotalBase
Decimal(18,2))



insert into #Albaranes (CodAlbaran, TotalBase)

select CodAlbaran,

(select sum(Importe_E)

from albaclilin

where albaclilin.codalbaran=albaclicab.codalbaran) as
Total

from AlbaCliCab

WHERE Albaclicab.CodCli BETWEEN @DeCliente AND @HaCliente
and

Albaclicab.fecha BETWEEN @DeFecha AND @HaFecha



select CodAlbaran, TotalBase,

(select count(*) from albaclilin where
albaclilin.codalbaran=#Albaranes.CodAlbaran and

codart between @DeArticulo and @HaArticulo) as HayArticulos

FROM #Albaranes

where TotalBase between @DeImporte and @HaImporte

order by codalbaran



como hago para referirme al campo HayArticulos en el WHERE?





Gracias

LuisMiguel
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
27/01/2008 - 22:37 | Informe spam
Hola LuisMigel,

Prueba esto:

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 AND
(SELECT COUNT(*)
FROM AlbacliLin
WHERE CodAlbaran = C.CodAlbaran AND
CodArticulo BETWEEN @DeArticulo AND @HaArticulo
) > 0
GROUP BY
C.CodAlbaran
HAVING
SUM(L.Importe) BETWEEN @DeImporte AND @HaImporte


El left join también puede ser un inner join porque para
un albarán sin lineas no se va a encontrar ningún articulo
en el rango de artículos indicado.

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