Idea con un SQL

Showing 21-45 of 45 messages
Idea con un SQL Edwin Duran 10/26/12 6:34 PM
Saludos

Necesito de su ayuda para hace una consulta por rango, de los campos periodo y mes, esta es la consulta

select sum(monto) from tabla1 where periodo >= 2011 and pediodo <= 2012 and mes >= 10 and mes <= 10

que sucede que si en el 2011 tengo un monto que pertenece al mes 11 no lo trae, ya que no se encuentra entre el rango de condición de meses, alguna idea para solucionar esto,  he probado con mes >= 10 or mes <= 10, pero no me trae los resultados correctos.

Saludos
Edwin Duran
Re: [vfp] Idea con un SQL edgar suarez kummers 10/26/12 6:46 PM
El menor o el mayor son frases logicas correctas.
El igual es para usarse en forma exclusiva.

Si algo va a ser mayor o igual a 10 puedes escribir apenas que sea mayor que 9.

Si algo va a ser mayor o igual a cero, puedes escribir mayor que -1

Si algo corresponde al mes de abril entonces escribes = 4

Tambien es bueno que coloques parentesis ...

Esto va sin tildes porque es un laptop que al escribirle la tilde queda antes de la letra.



 

Please look my LINKS --- What I offer ---







edgar suarez kummers
cel: 57-3176992038




Edwin Duran

--
 
 
 

RE: [vfp] Idea con un SQL Carlos Alfaro 10/26/12 7:01 PM

Lo que tenés que hacer es unir los valores de periodo y mes; y compararlos con la unión de 2011 y 10, para ello los pasas a carácter.

 

select sum(monto) from tabla1 Where str(periodo,4) + replicate('0',2 - len(alltrim(str(mes)))) + alltrim(str(mes)) >= ‘201110’ .and. str(periodo,4) + replicate('0',2 - len(alltrim(str(mes)))) + alltrim(str(mes)) <= ‘201210’

 

Posiblemente hay una manera mas sencilla, pero esto fue lo que pensé.

 

Bendiciones.

 

Carlos Alfaro

From: publice...@googlegroups.com [mailto:publice...@googlegroups.com] On Behalf Of Edwin Duran
Sent: viernes, 26 de octubre de 2012 07:35 p.m.
To: publice...@googlegroups.com
Subject: [vfp] Idea con un SQL

--
 
 
 

Re: Idea con un SQL mpulla 10/26/12 8:49 PM

Hola Edwin.

Anexa un campo mas a tu tabla donde guardas  Año*100 + Mes (201210 para la fecha actual)

Select sum(monto) From Tabla Where iYM >= 201110 And iYM <= 201210

Saludos.
Mauricio
RE: [vfp] Idea con un SQL Walter R. Ojeda Valiente 10/27/12 1:49 AM
No entiendo ¿qué es lo que quieres hacer?

Por supuesto que no te mostrará el mes 11 de 2011 porque está fuera de rango, en tu consulta le pides que te muestre solamente los datos del mes 10 de los años 2011 y 2012.

¿Acaso lo que quieres es que te muestre la suma de los montos entre Octubre 2011 y Octubre 2012? en ese caso sería:

SELECT SUM(MONTO) FROM TABLA1 WHERE (PERIODO = 2011 AND MES >= 10) OR (PERIODO = 2012 AND MES <= 10)

Aunque en este caso se procesará el mes 10 de ambos años.

Saludos.

Walter.





Date: Fri, 26 Oct 2012 18:34:30 -0700
From: edwinn...@gmail.com

To: publice...@googlegroups.com
Subject: [vfp] Idea con un SQL

--
 
 
 
RE: [vfp] Idea con un SQL Walter R. Ojeda Valiente 10/27/12 2:22 AM
Edgar, es cierto lo que dices, aunque para la gran mayoría de las personas con experiencia en programación es más legible:

MES >= 10

que:

MES > 9

Y con  respecto a -1, es cierto siempre y cuando los números sean enteros, no se aplica para todos los números decimales porque:
-0.5 es mayor que -1 y es menor que 0

por lo tanto, no serviría como condición para los números que sean cero o mayores que cero.

Saludos.

Walter.





From: edgark...@gmail.com
Date: Fri, 26 Oct 2012 20:46:06 -0500
Subject: Re: [vfp] Idea con un SQL
To: publice...@googlegroups.com --
 
 
 
Re: Idea con un SQL Alejandro Isla 10/27/12 4:20 AM
Hola, es imposible que te muestre el mes 11 debido a que en las condiciones del where pusiste "and mes <=10" es decir como 11 es > 10, te da .f. y no trae el registro.

Como bien te han preguntado ¿que quieres hacer?

La condición mes >=10 and mes <=10 solo admite (es equivalente) a mes = 10 para ser verdadera.

Saludos
Re: Idea con un SQL d.sue 10/27/12 5:51 AM
Saludos al foro, k me divierte todos lo dias.
Si la interpretacion exacta de Walter a tu consulta es correcta, la solucion ya te la dio.
Pero no va a resultar si tu rango abarca mas de 2 años, por ejemplo de 2010.10 a 2012.10 el select podria ser el k sigue...

SELECT SUM(monto) FROM tabla1 WHERE periodo*100+mes>=201010 and periodo*100+mes<=201210

Claro puedes usar betwen(....   Si gustas

Saludos a todos los del foro
Ojala no este equivocada mi respuesta...

Debora
Re: Idea con un SQL Edwin Duran 10/27/12 7:02 AM
Gracias a todos por su ayuda lo solucione de la siguiente manera


select sum(monto) from tabla1 where (periodo+(mes/100) >= 2011.10) and (pediodo+(mes/100) <= 2012.10
Re: [vfp] Re: Idea con un SQL Edward Cifuentes 10/27/12 7:03 AM
Sera esto lo que necesitas

anoini= 2011
anofin= 2012
mesini=10
mesfin=10

SELECT SUM(MONTO) FROM TABLA1 WHERE (PERIODO >= anoini AND MES >= mesini) AND (PERIODO< = anofin AND MES <= fin)








--




Re: [vfp] Re: Idea con un SQL Edward Cifuentes 10/27/12 7:09 AM
correccion

SELECT SUM(MONTO) FROM TABLA1 WHERE (PERIODO >= anoini AND MES >= mesini) AND (PERIODO< = anofin AND MES <= mesfin)
Re: [vfp] Re: Idea con un SQL Edwin Duran 10/27/12 7:44 AM
Gracias por tu ayuda pero de esa forma no funciona por ejemplo:

año              mes
2011             10
2011             11
2012             02
2012             10

si busco del 2011 del mes 10 al 2012 del mes 10, fíjate que el 2012 del mes 02 no cumple la primera condición  en el mes (PERIODO >= anoini AND MES >= mesini)

Saludos
Re: [vfp] Re: Idea con un SQL Edward Cifuentes 10/27/12 7:48 AM
Pense que necesitabas un rango de un año desde el mes de agosto hasta el otro mes de agotso

pero ya entendi lo que quieres es hacer un comparativo entre un mes y un año en especial

Quedaria asi si solo quieres agsoto del 2011 y agosto de 2012


SELECT SUM(MONTO) FROM TABLA1 WHERE (PERIODO = anoini AND MES = mesini) AND (PERIODO = anofin AND MES = mesfin)




--
 
 
 

Re: [vfp] Re: Idea con un SQL Edward Cifuentes 10/27/12 7:51 AM
correccion

SELECT SUM(MONTO) FROM TABLA1 WHERE (PERIODO = anoini AND MES = mesini) OR (PERIODO = anofin AND MES = mesfin)
Re: [vfp] Re: Idea con un SQL Edwin Duran 10/27/12 8:00 AM
no es un comparativo, es buscar en ese rango
Re: [vfp] Re: Idea con un SQL Guillermo MDQ 10/27/12 8:04 AM
Tambien podrias agregarle un campo a la tabla con el año y el mes (ej: 201010) y te resultara mas rapidas y mas faciles las consultas, ya que lo puedes solucionar con un BETWEEN.

Saludos
Guillermo
Re: Idea con un SQL mpulla 10/27/12 8:32 AM

Hola Edwin.

En lo personal prefiero gastarme 4 bytes (x registro) almacenándolos, que hacer la conversión (periodo+(mes/100) >= 2011.10) and (periodo+(mes/100)) de una tabla de varios cientos de miles por consulta.

Existe otras soluciones ya depende de como tengas tu db.

En mi respuesta anterior ya te mencione esto, pruébalo

CREATE CURSOR rs (iPeriodo I, iMes I, iYM I DEFAULT iPeriodo * 100 + iMes)
FOR i = 2010 TO 2012
    FOR j=1 TO 12
        INSERT INTO rs (iPeriodo, iMes) VALUES (i, j)       
    NEXT j
NEXT i

SELECT * FROM rs WHERE iYM between 201110 AND 201210

Saludos.
Mauricio
Re: [vfp] Idea con un SQL Luis Maria Guayan 10/27/12 8:34 AM
Para trabajar con rango de fechas siempre es mejor tener datos de Fecha, en tu caso que tienes separado el periodo y el mes, debes combinarlo para que tu condición quede de la forma:

... TRANSFORM(periodo, "@L 9999")+TRANSFORM(Mes, "@L 99")
BETWEEN "201110" AND "201211" ...

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

--
 
 
 

Re: Idea con un SQL Alberto Tapia Gómez 11/10/12 8:47 AM
a ver si entiendo,  necesitas periodo 2011 y 2012 además entre Octubre y Octubre, o sea Oct de 2011 a Dic 2011 y enero 2012 a oct 2012 ( la lógica sería)
(periodo = 2011 and (mes>=10 and mes <=12))  or (periodo = 2012 and (mes>=1 and mes <=10)).... lo probé y me funcionó .... ojalá te sirva
Talo de Chile
Re: Idea con un SQL Jose Mario 11/14/12 8:20 AM
perdon mpulla
la instruccion
 iYM I DEFAULT iPeriodo * 100 + iMes
esta instruccion es para motor de base
o para vfp 9 por ejemplo
no entiendo que hace
perdona mi ignorancia
Re: Idea con un SQL mpulla 11/14/12 8:51 AM

Hola José

Solo pregunta, no digas "perdona mi ignorancia"

iYM es el nombre de un campo cuyo valor por defecto iPeriodo * 100 + iMes, entonces para insertar un registro en el cursor de ejemplo tendrías que hacer

insert Into Rs (iPeriodo, iMes) Values (2012, 1)

El valor para el campo iYM seria 201201, este campo me ayuda a simplificar el Where

SELECT * FROM rs WHERE iYM between 201110 AND 201210

Caso contrario tendrías que hacer algo como lo que recomienda Alberto.


(periodo = 2011 and (mes>=10 and mes <=12))  or (periodo = 2012 and (mes>=1 and mes <=10))

Como vez la creación de este campo es para apoyarte y simplificar las cosas.

Saludos.
Mauricio


Re: Idea con un SQL Zorrro 11/14/12 10:49 AM
Yo agruparia asi para mostrar suma por mes, segun inteprete el rango de las fechas:

SELECT SUM(MONTO) sumamonto,STRZERO(PERIODO,4)+STRZERO(MES,2) PER FROM TABLA1 WHERE VAL(STRZERO(PERIODO,4)+STRZERO(MES,2)) BETW 201110 AND 201210 GROUP BY PER

Para la funcion strzero es:

Para pNum,pNZ
Return Replicate("0",pNZ-Len(Ltrim(Str(pNum))))+Ltrim(Str(pNum))
Endfunc
Re: Idea con un SQL Zorrro 11/14/12 10:54 AM
O como dice Luis Maria usando Transform:

SELECT SUM(MONTO) sumamonto,TRANSFORM(periodo, "@L 9999")+TRANSFORM(Mes, "@L 99") PER FROM TABLA1 WHERE TRANSFORM(periodo, "@L 9999")+TRANSFORM(Mes, "@L 99") BETWEEN "201110" AND "201211"GROUP BY PER


Saludos


El viernes, 26 de octubre de 2012 20:34:30 UTC-5, Edwin Duran escribió:
RE: [vfp] Re: Idea con un SQL Walter R. Ojeda Valiente 11/14/12 11:25 AM
En lugar de usar tu función STRZERO() es más fácil usar la función PADL() que viene incluida con el Visual FoxPro.

? PADL(345, 7, "0")

Saludos.

Walter.

"Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House




Date: Wed, 14 Nov 2012 10:49:46 -0800
From: robe...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: Idea con un SQL --
 
 
 
Re: [vfp] Re: Idea con un SQL Ze Roberto 11/14/12 12:06 PM
O talvez

TransForm(lnNumero, "@L " + Replicate("0", lnLargo))


El 14/11/12, Walter R. Ojeda Valiente <wr...@hotmail.com> escribió:
>
> En lugar de usar tu función STRZERO() es más fácil usar la función PADL()
> que viene incluida con el Visual FoxPro.
>
> ? PADL(345, 7, "0")
>
> Saludos.
>
> Walter.
>
> "Si puedes razonar con gente religiosa, no son gente religiosa". Dr. House
>
>
>
> --
>
>
>
>