agregar columna a una sentencia sql
Puedes obtener un cursor modificable si tienes VFP 9
... INTO CURSOR xx READWRITE
Para versiones anteriores tendrás que usar INTO DBF Ruta\NombreTabla
Luego, si no utilizas nombres largos de campo, puedes hacer
ALTER TABLE xx ADD COLUMN promedia n(12,2)
Lo que hay que tener en cuenta es que para efectuar ALTER TABLE sobre un cursor, Visual Fox hace una copia del cursor como una tabla free, por lo que las características especiales de un tabla que pertenece a una DBC se pierden.
En el caso de tener nombres largos de campos, puedes crear tu cursor con nombres cortos (hasta 10 caracteres) si en la lista utilizas AS.
Alternativamente puedes incorporar una función a cualquier *.prg que tengas en SET PROCEDURE
FUNCTION AddNumField(xnInt,xnDec)
*****************************
* xnInt Cantidad de enteros && uno por default
* xnDec. Cantidad de decimales (nada por default)
RETURN IIF(EMPTY(xnInt),"9",REPLICATE("9",xnInt));
+IIF(!EMPTY(xnDec),"."+REPLICATE("9",xnDec),"")
ENDFUNC
Y haces algo como este ejemplo:
IF USED("PEPEX")
SELECT PEPEX
USE
ENDIF
dia1=CTOD("01/01/2010")
dia2=dia1+60
cExpre="Suma N(12,2)"
SELECT fecha,factura,total,AddNumField(9,2);
FROM movim ;
WHERE BETWEEN(fecha,dia1,dia2) ;
INTO CURSOR pepex READWRITE
SELECT PEPEX
cCampo=Fields(FCOUNT()) && cCampo toma el nombre del último campo agregado.
replace ALL &cCampo WITH 0 && coloca todos los valores del último campo en cero
GO top
BROWSE
***********************************************************************************************
En el caso planteado
***********************
* Nota: al indicar SELECT (mValor) AS MONTO incorporamos un campo que tendrá el mismo valor en cada registro (el valor de mValor). Hay que evaluar la necesidad de esta columna ya que es una constante.
1) Con Alter TAble
---------------
if used("xx")
select xx
use
endif
mValor=thisform.Text1.Value
select (mValor) as monto, codi_clien, fecha, sede ;
from tabla1 into cursor xx READWRITE
ALTER TABLE XX ADD COLUMN Pmedia N(12,2)
SCAN
REPLACE pmedia with (Cálculo_de_pMedia)
ENDSCAN
go top
browse
1) Con User Function
------------------
if used("xx")
select xx
use
endif
mValor=thisform.Text1.Value
select (mValor) as monto, codi_clien, fecha, sede, AddNumField(9,2) ;
from tabla1 into cursor xx READWRITE
SCAN
REPLACE pmedia with (Cálculo_de_pMedia)
ENDSCAN
go top
browse