Power Builder - ayuda con instrucciones select

 
Vista:

ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 03/12/2005 18:22:12
hola, estoy desarrollando un sistema de control de despachos de granzon, y necesito hacer en un dw. que unos campos calculados me sumen registros que ya se hayan efectuados. para explicarlo mejor:

tengo estos campos en una tabla:
cod_despacho
ticket
metro3
precio_metro3

el caso es que debo agregar dos campos calculados:
acumulado_metro3 y acumulado_precio_metro3

cada uno de estos campos calculados debe efectuar esta operacion:

acumulado_metro3 debe calcular la suma del registro entrante mas el registro anterior, igualmente debe hacerlo el acumulado_precio_metro3.

mi pregunta es la siguiente: como hago para que el datawindow haga este proceso y que los valores sean los correctos. me dijeron que con un select dentro de otro select pero no se como hacerlo en realidad. alguien me podria ayudar con esto por favor.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 03/12/2005 18:24:35
por cierto la base de datos que estoy usando es sql anywhere
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por Jancarlo (890 intervenciones) el 04/12/2005 01:10:58
Si tu PK (cod_despacho) de la tabla es un correlativo entonces puedes sumar los registros anteriores hasta el registro actual. Efectivamente esto se puede solucionar con select anidados.

//Este primer ejemplo acumula la suma desde el primer registro hasta el actual

SELECT p.cod_despacho,
p.ticket,
p.metro3,
isnull(
(SELECT SUM(pp.metro3)
FROM tu_tabla pp
WHERE pp.cod_despacho<=p.cod_despacho)
,0) AS acumulado_metro3,
p.precio_metro3,
isnull(
(SELECT SUM(pp.precio_metro3)
FROM tu_tabla pp
WHERE pp.cod_despacho<=p.cod_despacho)
,0) AS acumulado_precio_metro3
FROM tu_tabla p
ORDER BY p.cod_despacho;

//Este otro ejemplo acumula la suma del registro actual mas el anterior

SELECT p.cod_despacho,
p.ticket,
p.metro3,
p.metro3 +
isnull(
(SELECT pp.metro3
FROM tu_tabla pp
WHERE pp.cod_despacho=(SELECT MAX(ppp.cod_despacho)
FROM tu_tabla ppp
WHERE ppp.cod_despacho<p.cod_despacho))
,0) AS acumulado_metro3,
p.precio_metro3,
p.precio_metro3 +
isnull(
(SELECT pp.precio_metro3
FROM tu_tabla pp
WHERE pp.cod_despacho=(SELECT MAX(ppp.cod_despacho)
FROM tu_tabla ppp
WHERE ppp.cod_despacho<p.cod_despacho))
,0) AS acumulado_precio_metro3
FROM tu_tabla p
ORDER BY p.cod_despacho;

Tal vez no sea la manera mas prática pero por ahora se me ocurre eso

Espero que sea lo que buscas.....sino nos comentas

Suerte !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por Carlos Gil (124 intervenciones) el 05/12/2005 18:03:20
Hola:

Eso de guardar en un campo un calculo matematico va en contra d la reglas de la normalizacion.

Utiliza un control "Compue" del DW y usas la funcion AcumulativeSum (campo )

saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 05/12/2005 21:34:45
si tienes razon, va en contra de las reglas de normalizacion pero el asunto es que como la informacion se pasa despues a una tabla en excel necesito almacenar esos datos porque sino no aparecen en el archivo final. y respecto a jancarlo muchas gracias por el mensaje pero aunque el codigo primario de la tabla va en correlativo los montos acumulados van almacenados de acuerdo a cada cliente. y por dia. tengo dos tablas una cliente donde almaceno los datos del cliente y otra tabla despacho donde almaceno los despachos de cada cliente aunque creo que me podria funcionar si aparte del pk le digo tambien que es por cliente, ahora una pregunta es que soy un poco nuevo con pb. ese script lo pongo en el sql painter del datawindow.
otra pregunta que significan las p y las pp que esta detras de los campos

SELECT p.cod_despacho,
p.ticket,
p.metro3,
isnull(
(SELECT SUM(pp.metro3)
FROM tu_tabla pp
WHERE pp.cod_despacho<=p.cod_despacho)
,0) AS acumulado_metro3,
p.precio_metro3,
isnull(
(SELECT SUM(pp.precio_metro3)
FROM tu_tabla pp
WHERE pp.cod_despacho<=p.cod_despacho)
,0) AS acumulado_precio_metro3
FROM tu_tabla p
ORDER BY p.cod_despacho;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por Jancarlo (890 intervenciones) el 05/12/2005 21:50:00
Hola Daniel

Claro yo sólo te di una idea ahora tu puedes modificar el query a tus necesidades.
La p y pp son los alias que se asignan a las tablas, en lugar que tener que poner el nombre completo de la tabla solo se pones el alias acompañado del campo de esa tabla.

Ejemplo

//Estos query vienen a ser lo mismo.......

SELECT TuTabla.cod_despacho
FROM TuTabla;

SELECT p.cod_despacho
FROM TuTabla p; //Aca se asigna el alias, puede ser el q elijas

Suerte !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 06/12/2005 03:40:42
gracias jancarlo:

lo hice de esta manera:

SELECT "despacho"."cod_desp",
"despacho"."cod_cliente",
"despacho"."fecha",
"despacho"."ticket",
"despacho"."metros_3",
"despacho"."precio_m3",
isnull(
(SELECT SUM("despacho"."metros_3")
FROM "despacho"
WHERE "despacho"."cod_desp" <= "despacho"."cod_desp" AND
"despacho"."cod_cliente" = 'part0001' AND
"despacho"."fecha" = '2005-10-18' ,0) AS acum_m3
isnull(
(SELECT SUM("despacho"."precio_m3")
FROM "despacho"
WHERE ( "despacho"."cod_desp" <= "despacho"."cod_desp" ) AND
( "despacho"."cod_cliente" = 'part0001' ) AND
( "despacho"."fecha" = '2005-10-18' ) AS "despacho"."acum_prec_m3"
FROM "despacho"
ORDER BY "despacho"."cod_desp";

pero me da el siguiente error:
syntax error or acces violation near ',' in... "='2005-10-18 [,] 0) as acum_m3...

y la verdad que no le estoy cayendo a la cosa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por Jancarlo (890 intervenciones) el 06/12/2005 04:57:51
El error sale al momento de terminar el segundo ISNULL, te falto cerrarlo apropiadamente.

Te sugiero cuando vayas a comparar fechas hazlo con convert

CONVERT(VARCHAR,COLUMNA_FECHA,103)='12/04/2005' //EL NUMERO 103 INDICA QUE EL FORMATO DE CONVERSIÓN SERÁ DD/MM/YYYY

Entences sería

SELECT "despacho"."cod_desp",
"despacho"."cod_cliente",
"despacho"."fecha",
"despacho"."ticket",
"despacho"."metros_3",
"despacho"."precio_m3",
isnull(
(SELECT SUM("despacho"."metros_3")
FROM "despacho"
WHERE "despacho"."cod_desp" <= "despacho"."cod_desp" AND
"despacho"."cod_cliente" = 'part0001' AND
convert(varchar,"despacho"."fecha",103) = '18/10/2005') ,0) AS acum_m3
isnull(
(SELECT SUM("despacho"."precio_m3")
FROM "despacho"
WHERE ( "despacho"."cod_desp" <= "despacho"."cod_desp" ) AND
( "despacho"."cod_cliente" = 'part0001' ) AND
( convert(varchar,"despacho"."fecha",103) = '18/10/2005')),0) AS "despacho"."acum_prec_m3"
FROM "despacho"
ORDER BY "despacho"."cod_desp";

Nos comentas ...

Suerte !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 06/12/2005 16:36:56
gracias jancarlo, pero lamentablemente no he logrado llegar al error, no soy muy diestro con sql script. hay alguna forma de hacerlo directamente por programacion de alguno de los eventos del datawindow y almacenarlo en la tabla al final. porque esto es cuando se ingresan los registros que hace el calculo y despues cuando se pidan los reportes tiene que aparecer todo igual por supuesto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 06/12/2005 17:09:19
logre hacerlo, pero no me esta dando los resultados que quiero, simplemente me esta acumulando todos los montos no me lo eta haciendo incrementado como deberia ser. pero bueno ya vere como resuelvo esto gracias de todas maneras jancarlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con instrucciones select

Publicado por daniel (8 intervenciones) el 07/12/2005 18:07:35
gracias por todo jan carlo, sin embargo, no lo hice como me recomendaste, encontre una funcion de los campos calculados del dw que se presta a mis necesidades y me funciona de lo mas bien. para referencia la funcion es acumulativesum(Xx, for all) y si creas los group de la forma conveniente la funcion hace los calculos como los necesitaba. en este caso agrupe el dw por fecha y por codigo de cliente y me funciona de maravilla. gracias por todo, estamos en contacto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar