FoxPro/Visual FoxPro - SQL DENTRO DE SQL

 
Vista:
sin imagen de perfil

SQL DENTRO DE SQL

Publicado por DALSOM (612 intervenciones) el 13/09/2002 21:18:32
HOLA A TODOS,
TENGO UNA TABLA DE FACTURA Y OTRA DE DETALLE DE FACTURA,
QUIERO DEL DETALLE DE LA FACTURA SACAR UN TOTAL DEL DETALLE DE CADA FACTURA, SOBRE UNOS IMPUESTOS, PERO QUIERO MOSTRARLOS TOTALIZADOS EN UN SQL DE LA TABLA DE FACTURAS, PARA ASI PONERLOS EN UN GRID.

EN POCAS PALABRAS HACER UN SQL DE TABLA1, QUE HACE REFERENCIA A MUCHOS REGISTROS DE TABLA2, QUE DEBO TOTALIZAR EN TABLA1 COMO UN SOLO VALOR POR REGISTRO.

ENTENDES??

PERO QUE CUMPLA CON ALGUNAS CONDICIONES, Y QUE CONVIERTA ALGUNOS VALORES PARA EL USUARIO, COMO VALORES LOGICOS POR SI O NO, ETC. Y ORDENARLAS EN UN SQL POR UNO O DOS CAMPOS.

SE QUE SE HACE CON SQL, PERO NO HE DADO EN EL PUNTO AUN.

ESPERO ME PUEDAN AYUDAR.

SALUDOS, DALSOM.
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:SQL DENTRO DE SQL

Publicado por eric (254 intervenciones) el 13/09/2002 21:42:01
Hola, existen varias formas para totalizar, pero la mas facil es :
Select sum(valor) from ....... where num_fac = un valor, Y EN LUGAR DE MANDARLO a una tabla, lo mandas a una variable , puedes amarrar las dos tablas por medio del numero de factura, es decir, WHERE TABLA1.NUM_FAC = TABLA2.NUM_FAC, otra forma es sacar un SQL con los datos de las dos tablas, amarrados por el numero de factura, los ordenas por numero de factura y totalizas, no se que se te haga mas facil, si quieres un poco mas de ayuda, por aqui andare un rato mas.
Suerte
E.
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
sin imagen de perfil

RE:SQL DENTRO DE SQL

Publicado por DALSOM (612 intervenciones) el 13/09/2002 22:19:45
A VER SI ENTIENDO
TENGO FACTURA COMO CABECERA, Y DETALLE COMO EL DETALLE DE LA FACTURA
AMBAS TABLAS TIENEN UN CAMPO NUMERO, QUE ES EL NUMERO DE LA FACTURA.

PERO HAY UN DATO QUE TIENE CADA FACTURA, SON LOS IMPUESTOS PARA CADA ARTICULO, QUE SE ENCUENTRAN EN EL DETALLE, Y NO PUEDO PONERLO EN LA CABECERA DE LA FACTURA, ENTONCES DEBO CALCULAR EL TOTAL DE TRES CAMPOS DE IMPUESTOS, DE VARIAS FILAS QUE CORRESPONDEN A LOS ARTICULOS DE LA FACTURA, Y QUE DEBO CALCULAR PARA CADA FACTURA, PUES FILTRARE LAS FACTURAS POR ALGUNAS CONDICIONES DADAS POR EL USUARIO EN TIEMPO DE EJECUCION.

NO PUEDO IR CREANDO UNO PRIMERO Y DESPUES EL OTRO, PUES ES UNO POR CADA FILA DE LA TABLA DE CABECERA.

GRACIAS POR CONTESTARME.
DALSOM.
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:SQL DENTRO DE SQL

Publicado por eric (254 intervenciones) el 13/09/2002 23:30:26
Hola, asi como dices, yo te recomendaria no usar SQL, sino ir barriendo la tabla de factura y amarrararla con detalle, pero no seria con SQL, sino do while, skip, set filter to, set order, y varias cosas mas, dependiendo de como lo organices, la ventaja de SQl es que se arma mas facil, pero entre mas tablas cruces, se puede alentar, si lo haces por medio de codigo, seria un poco mas tardadito de hacer.
Si entendi, quieres hacer una suma de los impuestos y poner el resultado en la tabla factura, si estoy en lo correcto, no entiendo para que es esto, pq como lo planteas, estos valores pueden ir cambiando????
por aqui estare como dos horas mas, por si se te ofrece algo
E.
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

Espero que te sirva..

Publicado por Alvaro Padilla (146 intervenciones) el 14/09/2002 00:44:34
a ver...
tenemos un Encabezado y un detalle, el cual contiene precio, e impuestos, quieres una consulta que te de:
# Factura Total (con impuestos)
Campos Encabezado: (FactE)
NumFact, Fecha, Cliente
Campos Detalle:(FactD)
NumFact, Producto, Cantidad, Precio, Impuesto

Select Facte.numfact, factE.cliente, ;
sum(factd.cantidad * (factd.precio * factd.impuesto)) as Total ;
from FactE ;
inner join FactD on Factd.NumFact = Facte.NumFact ;
Where cliente = 125 ;
into cursor cFacTot ;
group by FactE.NumFact ;
order by FactE.numfact

Lo que hara esta consulta (si no puse algo de mas o de menos ) es un registro por cada Factura, con los Sig. Campos: NumFact, Cliente, Total (el total, como veras es un campo calculado), dado que estamos agrupandolo (GROUP BY) la suma la hara por todos los registros del detalle de cada factura.
En caso de que no necesites algun campo de la tabla de encabezados, simplemente haces el select de la tabla de detalle, y te ahorras el JOIN

Saludos
APS.

P.D. respondeme aca mismo, en caso de que te haya funcionado o no, para saber si nos falto algo.

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
sin imagen de perfil

GRACIAS, ESTO PASO...

Publicado por DALSOM (612 intervenciones) el 19/09/2002 23:06:43
SUCEDE QUE SI, ES COMO ME EXPLICASTE,
PERO TAMBIEN ESTUBE ESTUDIANDO ALGO DE SQL STANDARD 2000 SERVER, Y DE LA FORMA QUE PENSABA HACERLO VFP5 NO LO SOPORTA, QUE ES

SELECT CAMPO1 AS CAMPO, CAMPO2 AS CAMPONOMBRE,;
(SELECT SUM(IMPUESTO) AS IMP FROM DETALLE WHERE DETALLE.FACNO=FACTURA.FACTNO GROUP BY FACTNO) AS IMP ,;
FROM FACTURA INTO CURSOR POR_PAGAR

PERO NO FUNCIONO,

PERO COMO ME MENCIONASTE, SI FUNCIONA. CON EL INNER JOIN.
ME DIO UN POCO DE TRABAJO ENTENDERLO, PERO SI, FUNCIONO A LA PERFECCION, PARA LO QUE REQUIERO POR AHORA.

GRACIAS MIL.
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