Foros del Web » Programando para Internet » ASP Clásico »

Problemas con una Consulta SQL ...

Estas en el tema de Problemas con una Consulta SQL ... en el foro de ASP Clásico en Foros del Web. Hola a todos: No he podido resolver aún este problema, a continuación les describo que es lo que pretendo hacer: Tengo una tabla llamada "ventas" ...
  #1 (permalink)  
Antiguo 31/01/2008, 13:33
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Exclamación Problemas con una Consulta SQL ...

Hola a todos:


No he podido resolver aún este problema, a continuación les describo que es lo que pretendo hacer:

Tengo una tabla llamada "ventas" con los siguientes campos:
Cita:
idusr int
nomcte text
rfc text
direccion text
numfact text
fecha date
claveprod text
tipo text
cantidad int
precio real
Lo que yo pretendo es extraer un Reporte de Ventas por cada cliente que haya hecho una compra; es decir, el reporte deberia quedar de la siguiente forma:

Cita:

Cliente 1--- Direccion --- RFC
Factura 1
Producto 1
Producto 2
Producto 3 ...
Factura 2
Producto 1
Producto 2
Producto 3 ...
. . .
Factura n
Producto 1
Producto 2
Producto 3 ...
Este reporte obviamente tendrá que crecer de acuerdo a los clientes que haya y al numero de facturas y productos que contemplen a determinado cliente.

El problema es que no sé como armar la consulta... si estuviera dentro de sus posibilidades asesorarme en este problema,, se los agradeceria bastante...

Saludos a todos... espero encontrar una solución...
  #2 (permalink)  
Antiguo 31/01/2008, 15:16
Avatar de a n g e l u s  
Fecha de Ingreso: enero-2006
Ubicación: Chile
Mensajes: 237
Antigüedad: 18 años, 5 meses
Puntos: 1
Re: Problemas con una Consulta SQL ...

hola ciisteado

en realidad deberias tener tres tablas para hacer eso (seria lo mejor)

ejemplo de consulta

select * from cliente c, compra b where c.id_cliente=b.id_cliente order by n_factura

do while not rs.eof

select * from productos where n_factura="&rs("n_factura")

do while no rs2.eof

...


..


------------------------------------

algo asi podria ser
__________________
Atte,
A n g e l u s
Concepción - Chile
más vale respuestas bien pensadas, que 7000 post
  #3 (permalink)  
Antiguo 31/01/2008, 19:33
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Problemas con una Consulta SQL ...

Cita:
Iniciado por ciisteado Ver Mensaje
Tengo una tabla llamada "ventas" con los siguientes campos:

Cita:
idusr int
nomcte text
rfc text
direccion text
numfact text
fecha date
claveprod text
tipo text
cantidad int
precio real
Cielos!!

Necesitas normalizar eso pero a la voz de YA!

Como a n g e l u s dice, tres tablas salen de ahí:

Clientes:
idusr int <- Suponiendo que en realidad sea IdCliente
nomcte text
rfc text
direccion text

Facturas
numfact text
fecha date
IdCliente

FacturasDetalle
numfact text
claveprod text
tipo text
cantidad int
precio real

Y ya con esas tres tablas se puede hacer lo que quieres sin mucho problema. ¿No hay posibilidad de meterle mano a esa tabla?
  #4 (permalink)  
Antiguo 01/02/2008, 10:44
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Problemas con una Consulta SQL ...

Hola:

Mmmm, de hecho en la Base de Datos que tengo, existen tambien la Tabla "Clientes" y la Tabla "Productos",,,

¿¿ será que con esas dos tablas ya puedo realizar la consulta...??

El problema en sí,, es que no se como hacerlo... desde luego hay posibilidad de meterle mano a la tabla...

Por favor, ayudenme..!!!

Saludos... y gracias por todo...
  #5 (permalink)  
Antiguo 01/02/2008, 11:15
 
Fecha de Ingreso: septiembre-2007
Mensajes: 93
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problemas con una Consulta SQL ...

Hola

si ya tienes las tablas en tu base de datos, nadamas es cuestion de checar los campos de cada una y ver si de esos que tienes puedes realizar la consulta
como te dijo angelus y Myakire

mi pregunta es que esta hecha tu base de datos?
  #6 (permalink)  
Antiguo 01/02/2008, 11:18
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Problemas con una Consulta SQL ...

mmm, supongo en tu tabla Productos es en realidad en catalogo de productos, es decir esa tabla se ligaría a la que yo puse como FacturaDetalle para obtener la descripción del producto vía el campo claveprod.

Insisto, necesitas modelar esa tabla en tres para que puedas facilitarte las cosas en un futuro. Cuándo lo hagas, nos dices como quedó y hacemos la consulta.

saludos
  #7 (permalink)  
Antiguo 01/02/2008, 11:27
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Problemas con una Consulta SQL ...

Hola:

Ok, entonces Modelaré mi tabla haber de que forma la adapto... posterior a eso los contacto de nuevo, para decirles como quedo... y me puedan ayudar con la consulta...


El problema creo esta, en que en la tabla ventas no tengo un "idcliente" para relacionar al cliente en la tabla "Clientes", el "idusr" que esta en la tabla "ventas" corresponde al "id" del vendedor que realizo la venta,,, por ahí podría empezar

Mi base de datos esta en SQL Server 2005....

mientras tanto... Gracias...

Seguimos en contacto...
  #8 (permalink)  
Antiguo 01/02/2008, 12:21
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo Re: Problemas con una Consulta SQL ...

Hey: cool:

Pues ya Modele la tabla según mis cálculos... quedo de la siguiente manera:

Ventas
idusr bigint
idcliente bigint
idfactura bigint

Factura
numfact text
fecha date
idcliente bigint

FacturaDetalle
numfact text
claveprod text
tipo text
cantidad int
precio real

En base a esto, me atrevi a armar la consulta,,, que no sé si este bien pero les pongo el código para que puedan checarla...
Código HTML:
set rs=server.CreateObject("adodb.recordset")
set rs2=server.CreateObject("adodb.recordset")
set rs3=server.CreateObject("adodb.recordset")
set rs4=server.CreateObject("adodb.recordset")
set rs5=server.CreateObject("adodb.recordset")

sql="SELECT idcliente FROM ventas"
rs.open sql,conexion
do while not rs.eof
	sql="SELECT id,nombre FROM clientes WHERE id="&rs("idcliente")
	rs2.open sql,conexion
	do while not rs2.eof
		sql="SELECT idfactura FROM ventas WHERE idfactura=" &rs2("id")
		rs3.open sql,conexion
		do while not rs3.eof
			sql="SELECT numfact,id FROM factura WHERE id=" &rs3("idfactura")
			rs4.open sql,conexion
			do while not rs4.eof
				sql="SELECT * FROM facturadetalle WHERE numfact like '"&rs4("numfact")&"'"
				rs5.open sql,conexion
				do while not rs5.eof
					response.write("Cliente: "&rs2("nombre")&" "&"Direccion: "&rs2("direccion")&" "&"RFC: "&rs2("rfc")&"<br>")
					response.write("Factura: "&rs4("numfact")&"<br>")
					response.write("Productos:"&"<br>")
					response.write("Tipo: "&rs5("tipo")&" "&"Clave Producto: "&rs5("claveprod")&"<br>")
					rs5.movenext
				loop
				rs5.close
				rs4.movenext
			loop
			rs4.close
			rs3.movenext
		loop
		rs3.close
		rs2.movenext
	loop
	rs2.close
	rs.movenext	
loop
Espero respuesta,,,

Saludos a todos... y de verdad gracias por tomarse tiempo en ayudarme...
  #9 (permalink)  
Antiguo 01/02/2008, 12:22
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo Re: Problemas con una Consulta SQL ...

Hey: cool:

Pues ya Modele la tabla según mis cálculos... quedo de la siguiente manera:

Ventas
idusr bigint
idcliente bigint
idfactura bigint

Factura
numfact text
fecha date
idcliente bigint

FacturaDetalle
numfact text
claveprod text
tipo text
cantidad int
precio real

En base a esto, me atrevi a armar la consulta,,, que no sé si este bien pero les pongo el código para que puedan checarla...
Código HTML:
<%
set rs=server.CreateObject("adodb.recordset")
set rs2=server.CreateObject("adodb.recordset")
set rs3=server.CreateObject("adodb.recordset")
set rs4=server.CreateObject("adodb.recordset")
set rs5=server.CreateObject("adodb.recordset")

sql="SELECT idcliente FROM ventas"
rs.open sql,conexion
do while not rs.eof
	sql="SELECT id,nombre FROM clientes WHERE id="&rs("idcliente")
	rs2.open sql,conexion
	do while not rs2.eof
		sql="SELECT idfactura FROM ventas WHERE idfactura=" &rs2("id")
		rs3.open sql,conexion
		do while not rs3.eof
			sql="SELECT numfact,id FROM factura WHERE id=" &rs3("idfactura")
			rs4.open sql,conexion
			do while not rs4.eof
				sql="SELECT * FROM facturadetalle WHERE numfact like '"&rs4("numfact")&"'"
				rs5.open sql,conexion
				do while not rs5.eof
					response.write("Cliente: "&rs2("nombre")&" "&"Direccion: "&rs2("direccion")&" "&"RFC: "&rs2("rfc")&"<br>")
					response.write("Factura: "&rs4("numfact")&"<br>")
					response.write("Productos:"&"<br>")
					response.write("Tipo: "&rs5("tipo")&" "&"Clave Producto: "&rs5("claveprod")&"<br>")
					rs5.movenext
				loop
				rs5.close
				rs4.movenext
			loop
			rs4.close
			rs3.movenext
		loop
		rs3.close
		rs2.movenext
	loop
	rs2.close
	rs.movenext	
loop
%> 
Espero respuesta,,,

Saludos a todos... y de verdad gracias por tomarse tiempo en ayudarme...
  #10 (permalink)  
Antiguo 01/02/2008, 13:00
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problemas con una Consulta SQL ...

ahora, podrias proporcionar con cuales campos se estan realizando las relaciones entre tablas???
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #11 (permalink)  
Antiguo 01/02/2008, 13:13
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Problemas con una Consulta SQL ...

Hola:

Claro, mira las relaciones estan de esta manera según mi forma de ver:

Ventas--Clientes
idcliente

Ventas--Factura
idfactura

Factura--FacturaDetalle
numfact

Espero me ayuden... el sript que puse anteriormente, lo estoy probando pero no me devuelve nada... no sé si este bien armado mi select...

Saludos...
  #12 (permalink)  
Antiguo 01/02/2008, 13:52
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Exclamación Re: Problemas con una Consulta SQL ...

Hola a todos:

Pues parece que solo son detalles especificos para que quede listo este problema... ya adapte el código y me arroja los datos que necesito, con la unica premisa de que me los repite....

El código es el siguiente:

Código HTML:
<%
set rs=server.CreateObject("adodb.recordset")
set rs2=server.CreateObject("adodb.recordset")
set rs3=server.CreateObject("adodb.recordset")
set rs4=server.CreateObject("adodb.recordset")

sql="SELECT idcliente FROM ventas"
rs.open sql,conexion
do while not rs.eof
	sql="SELECT id,nombre,direccion,rfc FROM clientes WHERE id="&rs("idcliente")
	rs2.open sql,conexion
	response.write("<br>")
	do while not rs2.eof
		response.write("Cliente: "&rs2("nombre")&" "&"Direccion: "&rs2("direccion")&" "&"RFC: "&rs2("rfc")&"<br>")		
		sql="SELECT numfact,idcliente FROM factura WHERE idcliente="&rs2("id")
		rs3.open sql,conexion
		do while not rs3.eof
			response.write("Factura: "&"<br>")
			response.write(rs3("numfact")&"<br>")
			sql="SELECT * FROM facturadetalle WHERE numfact like '"&rs3("numfact")&"'"
			rs4.open sql,conexion
			response.Write("Productos: "&"<br>")
			do while not rs4.eof
				response.write("Tipo: "&rs4("tipo")&" "&"Clave Producto: "&rs4("claveprod")&"<br>")
				rs4.movenext
			loop
			rs4.close
			rs3.movenext
		loop
		rs3.close
		rs2.movenext
	loop
	rs2.close
	rs.movenext	
loop
%> 
Dandome como resultado esto:


Cita:
Cliente: Superparangaricutirimicuaro Direccion: Teletubis 302 RFC: sd5156165
Factura:
111222333
Productos:
Tipo: cel Clave Producto: 789456123123132213
Tipo: acces Clave Producto: 4
Tipo: sims Clave Producto: 1234
Factura:
111222444
Productos:
Tipo: cel Clave Producto: 3464576567568878
Tipo: acces Clave Producto: 3
Tipo: sims Clave Producto: 987

Cliente: Superparangaricutirimicuaro Direccion: Teletubis 302 RFC: sd5156165
Factura:
111222333
Productos:
Tipo: cel Clave Producto: 789456123123132213
Tipo: acces Clave Producto: 4
Tipo: sims Clave Producto: 1234
Factura:
111222444
Productos:
Tipo: cel Clave Producto: 3464576567568878
Tipo: acces Clave Producto: 3
Tipo: sims Clave Producto: 987
Lo que hace es repetirme los datos, pero ahora no se en donde tengo que modificar, para que no me los duplique,,,

Por favor, si pueden ayudarme,, se los agradecere bastante...

Saludos a todos...

Gracias otra ves..!!!!

Última edición por ciisteado; 01/02/2008 a las 13:54 Razón: Mejor entendimiento...
  #13 (permalink)  
Antiguo 01/02/2008, 14:04
Avatar de Adler
Colaborador
 
Fecha de Ingreso: diciembre-2006
Mensajes: 4.671
Antigüedad: 17 años, 5 meses
Puntos: 126
Re: Problemas con una Consulta SQL ...

Estás usando una consulta like sin comodines. Y otras no estaban cerradas.
Para que no te los repita usa Distinct

Código PHP:

sql
="SELECT DISTINCT idcliente FROM ventas"
rs.open sql,conexion
do while not rs.eof
    sql
="SELECT id,nombre,direccion,rfc FROM clientes WHERE id="&rs("idcliente")&""
    
rs2.open sql,conexion
    response
.write("<br>")
    do while 
not rs2.eof
        response
.write("Cliente: "&rs2("nombre")&" "&"Direccion: "&rs2("direccion")&" "&"RFC: "&rs2("rfc")&"<br>")        
        
sql="SELECT numfact,idcliente FROM factura WHERE idcliente="&rs2("id")""
        
rs3.open sql,conexion
        
do while not rs3.eof
            response
.write("Factura: "&"<br>")
            
response.write(rs3("numfact")&"<br>")
            
sql="SELECT * FROM facturadetalle WHERE numfact like '%"&rs3("numfact")&"%'"
            
rs4.open sql,conexion
            response
.Write("Productos: "&"<br>")
            do while 
not rs4.eof
                response
.write("Tipo: "&rs4("tipo")&" "&"Clave Producto: "&rs4("claveprod")&"<br>")
                
rs4.movenext
            loop
            rs4
.close
            rs3
.movenext
        loop
        rs3
.close
        rs2
.movenext
    loop
    rs2
.close
    rs
.movenext    
loop
%> 

Suerte
__________________
Los formularios se envían/validan con un botón Submit
<input type="submit" value="Enviar" style="background-color:#0B5795; font:bold 10px verdana; color:#FFF;" />
  #14 (permalink)  
Antiguo 01/02/2008, 14:05
 
Fecha de Ingreso: julio-2007
Mensajes: 14
Antigüedad: 16 años, 11 meses
Puntos: 0
Re: Problemas con una Consulta SQL ...

Talvez si usas inner join en la consulta se te facilite un poco, osea has solo una consulta en lugar de las 4 que tienes, pienso que es mas rentable y eficiente si lo haces así
  #15 (permalink)  
Antiguo 01/02/2008, 14:21
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Mensaje Re: Problemas con una Consulta SQL ...

Hola a todos:

Gracias por cooperar y ayudar a solucionar este problema... para los que apenas empezamos en este mundo, voy a postear el código final... esperando que sirva como referencia para problemas posteriores...

Código HTML:
<!-- #include file="conexion.asp" -->
<%
set rs=server.CreateObject("adodb.recordset")
set rs2=server.CreateObject("adodb.recordset")
set rs3=server.CreateObject("adodb.recordset")
set rs4=server.CreateObject("adodb.recordset")

sql="SELECT distinct(idcliente) FROM ventas"
rs.open sql,conexion
do while not rs.eof
	sql="SELECT id,nombre,direccion,rfc FROM clientes WHERE id="&rs("idcliente")&""
	rs2.open sql,conexion
	response.write("<br>")
	do while not rs2.eof
		response.write("Cliente: "&rs2("nombre")&" "&"Direccion: "&rs2("direccion")&" "&"RFC: "&rs2("rfc")&"<br>")		
		sql="SELECT numfact,idcliente FROM factura WHERE idcliente="&rs2("id")&""
		rs3.open sql,conexion
		do while not rs3.eof
			response.write("Factura: "&"<br>")
			response.write(rs3("numfact")&"<br>")
			sql="SELECT * FROM facturadetalle WHERE numfact like '%"&rs3("numfact")&"%'"
			rs4.open sql,conexion
			response.Write("Productos: "&"<br>")
			do while not rs4.eof
				response.write("Tipo: "&rs4("tipo")&" "&"Clave Producto: "&rs4("claveprod")&"<br>")
				rs4.movenext
			loop
			rs4.close
			rs3.movenext
		loop
		rs3.close
		rs2.movenext
	loop
	rs2.close
	rs.movenext	
loop
Infinitamente agradecido con todos los que se tomaron tiempo en facilitarme una solución...

Gracias..!!!

Saludos a todos...
  #16 (permalink)  
Antiguo 01/02/2008, 16:36
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Re: Problemas con una Consulta SQL ...

Que bueno que ya te salió

peeeeeroooo ..... como tico2209 dice, deberías mejor usar un select relacionado, ya que esa era la idea al modelar las tablas.

No le veo la utilidad a la tabla de ventas ya que esos datos están en Facturas, además son de tipos diferentes los ID's ...

en fin, no me hagas caso, jeje, pero quizá en un futuro ese método que ocupaste haga extremadamente lenta la carga de la página cuando hayan decenas de miles de registros

Saludos
  #17 (permalink)  
Antiguo 01/02/2008, 16:48
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Re: Problemas con una Consulta SQL ...

Cita:
Iniciado por Myakire Ver Mensaje
Que bueno que ya te salió
Excelente noticia....
Cita:
Iniciado por Myakire;
en fin, no me hagas caso, jeje, pero quizá en un futuro ese método que ocupaste haga extremadamente lenta la carga de la página cuando hayan decenas de miles de registros

Saludos
Sensei es usted?? o Dark Master :
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #18 (permalink)  
Antiguo 01/02/2008, 16:50
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Re: Problemas con una Consulta SQL ...

Hola a todos:

Mmmm... en ese caso, agradecería mucho me ilustraran, por que no tengo idea de cómo hacerlo...

Saludos...

Y gracias...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:35.