Consulta sencilla (creo)

08/06/2005 - 18:05 por SergioT | Informe spam
Hola

Tengo una tabla mas o menos asi TABLA(NroDoc, Item,CantIng,CantSal) que
tiene los intgresaso y salidas de almacen deseo obtener una consulta así:

select item,NroDoc,CantIng,CantSal
fom TABLA
Where Item='a'

Item NroDoc CantIng CantSal SALDO
a 123 10 0
10
a 125 100 0
110
a 54 0 60
50

Mi problema es que no se como calcular la columna SALDO en la consulta con
sql, por que no quiero tener que mediante programa recorrer el DS y llenar
esta columna ya que no me parece optimo y ademas estoy seguro que será mas
rapido el sqlServer que el codigo que sume y reste en el DS resultante


GRACIAS POR LA AYUDA

Preguntas similare

Leer las respuestas

#1 Elmer Carías
08/06/2005 - 18:39 | Informe spam
Hola,

Eso que necesitas lo puedes hacer con un Subquery anidado, algo parecido a
esto

Select B.Item, B.NroDoc, B.CantIng, B.CantSal,
(select isnull(sum(A.CantIng),0) - isnull(sum(A.CantSal),0) from
TABLA A where A.Item = B.Item and B.NroDoc <= A.NroDoc) as SALDO
from TABLA B
Where B.Item='a'

Ahora bien este query lo hago creyendo que la llave de tu tabla es el Item y
el NroDoc.

Sino dime cual es la llave exacta, asi te puedo hacer el query correcto, o
mandame la estructura de la tabla.

Espero esto te sirva de algo

Atte. Elmer Carías
El Salvador, CentroAmerica
DCE 3
MSN:


"SergioT" wrote in message
news:
Hola

Tengo una tabla mas o menos asi TABLA(NroDoc, Item,CantIng,CantSal) que
tiene los intgresaso y salidas de almacen deseo obtener una consulta así:

select item,NroDoc,CantIng,CantSal
fom TABLA
Where Item='a'

Item NroDoc CantIng CantSal SALDO
a 123 10 0 10
a 125 100 0 110
a 54 0 60 50

Mi problema es que no se como calcular la columna SALDO en la consulta con
sql, por que no quiero tener que mediante programa recorrer el DS y llenar
esta columna ya que no me parece optimo y ademas estoy seguro que será mas
rapido el sqlServer que el codigo que sume y reste en el DS resultante


GRACIAS POR LA AYUDA

Respuesta Responder a este mensaje
#2 SergioT
08/06/2005 - 21:54 | Informe spam
Hola


Te doy mas detalles , en realidad es una tabla donde estan los ingresos y
salidas del inventario tengo la columna redundante de Fecha que está ahi
para no tener que jacer el join con la tabla cabecera, el Id de la tabla
cabecera (idGlo) + un correlativo dentro de cada documento (idMov) son la
clave de esta tabla , tengo un indice por código de item

En realidad la tabla con datos se ve mas o menos así y el objetivo es sacar
un kardex de un item en particular en un rango de fechas y que esté ordenado
por fecha

Item Fecha NroDoc CantIng CantSal
idGlo idMov
a 01/01/2005 123 10
0 1 1
b 01/01/2005 123 3
0 1 2
c 01/01/2005 123 2
0 1 3
a 01/02/2005 100 10
0 2 1
b 01/02/2005 100 5
0 2 2
a 01/03/2005 23 0
60 3 1
d 01/03/2005 23 0
15 3 2
a 01/03/2005 24 0
10 4 1


Ahora voy a probar la consulta q me mandaste ya con la tabla verdadera

Gracias por la ayuda
Salu2
Sergio

"Elmer Carías" wrote in message
news:
Hola,

Eso que necesitas lo puedes hacer con un Subquery anidado, algo parecido a
esto

Select B.Item, B.NroDoc, B.CantIng, B.CantSal,
(select isnull(sum(A.CantIng),0) - isnull(sum(A.CantSal),0) from
TABLA A where A.Item = B.Item and B.NroDoc <= A.NroDoc) as SALDO
from TABLA B
Where B.Item='a'

Ahora bien este query lo hago creyendo que la llave de tu tabla es el Item
y el NroDoc.

Sino dime cual es la llave exacta, asi te puedo hacer el query correcto, o
mandame la estructura de la tabla.

Espero esto te sirva de algo

Atte. Elmer Carías
El Salvador, CentroAmerica
DCE 3
MSN:


"SergioT" wrote in message
news:
Hola

Tengo una tabla mas o menos asi TABLA(NroDoc, Item,CantIng,CantSal) que
tiene los intgresaso y salidas de almacen deseo obtener una consulta
así:

select item,NroDoc,CantIng,CantSal
fom TABLA
Where Item='a'

Item NroDoc CantIng CantSal SALDO
a 123 10 0 10
a 125 100 0 110
a 54 0 60 50

Mi problema es que no se como calcular la columna SALDO en la consulta
con sql, por que no quiero tener que mediante programa recorrer el DS y
llenar esta columna ya que no me parece optimo y ademas estoy seguro que
será mas rapido el sqlServer que el codigo que sume y reste en el DS
resultante


GRACIAS POR LA AYUDA





Respuesta Responder a este mensaje
#3 SergioT
08/06/2005 - 23:24 | Informe spam
Hola

En base a lo q me envias he hecho la sgte consulta que medio q funciona pero
no llega a funcionar bien por culpa del orden en el cual esta la tabla,
resulta que el resultado final debe estar ordenado por fecha, pero la sub
consulta que calcula el saldo no permite tener un ORDER BY por que es
subconsulta, entonces no hay forma que el saldo se calcules bien


SELECT fec,C.NomMov,M.ndoc,
coalesce(CantIng,0) as Ingreso,
coalesce(CantSal,0) as Salida,
( SELECT sum(coalesce(bNotmov.Canting,0))-
sum(coalesce(bNotmov.CantSal,0)) as Saldo
FROM bNotmov
WHERE bNotmov.coditem=@CodItem AND bnotmov.idglo<=M.idGlo
) as Saldo
FROM bnotmov M left join bcodmov C
ON M.tdoc=C.codmov

WHERE M.coditem=@CodItem
and ( @Del<=fec and fec<=@Al )

ORDER BY m.fec,C.EsSalida

La tabla bCodmov guarda la descripcion del tipo de transacion que esta en la
tabla de detalle y ademas indica si se trata de una transaccion de
ingreso/salida de almacen cuando es ingreso es 1 y 0 si es salida, por eso
lo quiero usar para ordenar los movimientos de forma que los ingresos por
fecha esten antes que las salidas de la misma fecha

GRACIAS POR TU TIEMPO

"Elmer Carías" wrote in message
news:
Hola,

Eso que necesitas lo puedes hacer con un Subquery anidado, algo parecido a
esto

Select B.Item, B.NroDoc, B.CantIng, B.CantSal,
(select isnull(sum(A.CantIng),0) - isnull(sum(A.CantSal),0) from
TABLA A where A.Item = B.Item and B.NroDoc <= A.NroDoc) as SALDO
from TABLA B
Where B.Item='a'

Ahora bien este query lo hago creyendo que la llave de tu tabla es el Item
y el NroDoc.

Sino dime cual es la llave exacta, asi te puedo hacer el query correcto, o
mandame la estructura de la tabla.

Espero esto te sirva de algo

Atte. Elmer Carías
El Salvador, CentroAmerica
DCE 3
MSN:


"SergioT" wrote in message
news:
Hola

Tengo una tabla mas o menos asi TABLA(NroDoc, Item,CantIng,CantSal) que
tiene los intgresaso y salidas de almacen deseo obtener una consulta
así:

select item,NroDoc,CantIng,CantSal
fom TABLA
Where Item='a'

Item NroDoc CantIng CantSal SALDO
a 123 10 0 10
a 125 100 0 110
a 54 0 60 50

Mi problema es que no se como calcular la columna SALDO en la consulta
con sql, por que no quiero tener que mediante programa recorrer el DS y
llenar esta columna ya que no me parece optimo y ademas estoy seguro que
será mas rapido el sqlServer que el codigo que sume y reste en el DS
resultante


GRACIAS POR LA AYUDA





Respuesta Responder a este mensaje
#4 Elmer Carías
09/06/2005 - 19:43 | Informe spam
Escribeme directamente a mi cuenta y ahi te pedire alguna información extra,
para hacerte el query, y te digo aunque tenga eso de la fecha si se puede
hacer en un solo query. Solo que necesitaría la estructura de la tabla,
crearla, meterle unos datos y te envio el query funcionando.

Si tienes messenger de Hotmail, agregame

Atte. Elmer Carías
El Salvador, CentroAmerica
DCE 3
MSN:


"SergioT" wrote in message
news:%
Hola

En base a lo q me envias he hecho la sgte consulta que medio q funciona
pero no llega a funcionar bien por culpa del orden en el cual esta la
tabla, resulta que el resultado final debe estar ordenado por fecha, pero
la sub consulta que calcula el saldo no permite tener un ORDER BY por que
es subconsulta, entonces no hay forma que el saldo se calcules bien


SELECT fec,C.NomMov,M.ndoc,
coalesce(CantIng,0) as Ingreso,
coalesce(CantSal,0) as Salida,
( SELECT sum(coalesce(bNotmov.Canting,0))-
sum(coalesce(bNotmov.CantSal,0)) as Saldo
FROM bNotmov
WHERE bNotmov.coditem=@CodItem AND bnotmov.idglo<=M.idGlo
) as Saldo
FROM bnotmov M left join bcodmov C
ON M.tdoc=C.codmov

WHERE M.coditem=@CodItem
and ( @Del<=fec and fec<=@Al )

ORDER BY m.fec,C.EsSalida

La tabla bCodmov guarda la descripcion del tipo de transacion que esta en
la tabla de detalle y ademas indica si se trata de una transaccion de
ingreso/salida de almacen cuando es ingreso es 1 y 0 si es salida, por eso
lo quiero usar para ordenar los movimientos de forma que los ingresos por
fecha esten antes que las salidas de la misma fecha

GRACIAS POR TU TIEMPO

"Elmer Carías" wrote in message
news:
Hola,

Eso que necesitas lo puedes hacer con un Subquery anidado, algo parecido
a esto

Select B.Item, B.NroDoc, B.CantIng, B.CantSal,
(select isnull(sum(A.CantIng),0) - isnull(sum(A.CantSal),0) from
TABLA A where A.Item = B.Item and B.NroDoc <= A.NroDoc) as SALDO
from TABLA B
Where B.Item='a'

Ahora bien este query lo hago creyendo que la llave de tu tabla es el
Item y el NroDoc.

Sino dime cual es la llave exacta, asi te puedo hacer el query correcto,
o mandame la estructura de la tabla.

Espero esto te sirva de algo

Atte. Elmer Carías
El Salvador, CentroAmerica
DCE 3
MSN:


"SergioT" wrote in message
news:
Hola

Tengo una tabla mas o menos asi TABLA(NroDoc, Item,CantIng,CantSal)
que tiene los intgresaso y salidas de almacen deseo obtener una consulta
así:

select item,NroDoc,CantIng,CantSal
fom TABLA
Where Item='a'

Item NroDoc CantIng CantSal SALDO
a 123 10 0 10
a 125 100 0 110
a 54 0 60 50

Mi problema es que no se como calcular la columna SALDO en la consulta
con sql, por que no quiero tener que mediante programa recorrer el DS y
llenar esta columna ya que no me parece optimo y ademas estoy seguro que
será mas rapido el sqlServer que el codigo que sume y reste en el DS
resultante


GRACIAS POR LA AYUDA









email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida