Está en la página 1de 7

11/2/2017 ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?

SELECTSQL

Pginaprincipal Indiceportemas Indiceporfecha BuscarconGoogle

ForoComunidadVFP Acercade..

9dediciembrede2004 BuscarenelBlog

Cmoycundousar BuscarenesteBlog
Buscar
subconsultas...?SELECTSQL
Arculos
Algunavezsehapreguntadocomosacaresa
consultaSQLquelehanpedido?,intentas 2017(5)
proyectartablasconFULLJOIN,INNERJOIN,LEFT
2016(68)
JOINytodavianoseobenenlosresultados
deseados... 2015(80)
2014(20)
Aveceshayquerecurriralassubconsultaspara 2013(21)
llegaranuestroobjevo...Quizsespicoelestar
2012(28)
buscandolasformasdeejecutarconsultasSELECT
SQLparaobtenerunconjuntodedatosespecco, 2011(24)
estoporqueyaestscansadodecrearcursores 2010(11)
hechosconCREATECURSORyrellenadosmediante
2009(17)
uncicloSCAN...ENDSCAN(ok,podrashacerlocon
DOWHILENOTEOF(),peroesoyaestpasadode 2008(37)
moda,ademsdequeresultaserpocoeciente 2007(50)
debidoaquenoulizarsasumximola
2006(96)
opmizacinRushMore,unadelasventajasdel
2005(52)
usodeVisualFoxPro).Hazconsultadoconalgunos
detuscolegasyterespondenqueefecvamente, 2004(53)
debehaberalgunamaneradehacerlopormedio diciembre(4)
desentenciasSQL.Ytusextosendocasitelo Obtenerlaversioncon
puedegritar!! quefuecompiladoun
EXEde...
Aconnuacinexpondremosuncasopicoenlos Comosemueveelratn
cualessernecesariohacerunoscuantos"trucos"
Cmoycundousar
paraobtenereltanansiadocursorquenonosdeja subconsultas...?
enpaz: SELECTSQL
Reduciendoelempo
Lagerenciatepidequeexpongasenunreporteun dedesarrollo
resumendelascomprasyventasdelosarculos
enellmomes,dondecomparesladoalado, noviembre(3)

cuantossevendieron,cuantossecompraronpor octubre(3)
arculo,quedandoquizasalgoporeleslo: sepembre(3)

agosto(7)
IDArculo Descripcion Compras Ventas
julio(6)
https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 1/7
11/2/2017 ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?SELECTSQL

001 Camisa XXX XXX junio(4)


002 Pantalon XXX XXX mayo(3)
003 Blusa XXX XXX abril(5)
marzo(8)
Parecealgosencilloynomuydicilderealizar,
febrero(6)
peroespicoqueeneldiseodetubasededatos
hayasdejadoporseparadounaendadpara enero(1)
comprasyunaendadparaventas,porloque 2003(51)
tendriamoslossiguientesendades:
2002(65)

2001(33)
2000(57)

Entradadestacada

Documentacinde
FoxBarcode

Lomasvistoestasemana
Loprimeroquesenospodraocurriresuna
consultadondeproyectaramos"todos"vs"todos"
Trabajarconfechasyhoras
paraobtenerconjuntodedatosdeseados: enVisualFoxPro

FuncionaVisualFoxPro9
SELECT Ventas.IDArticulo, SUM(compras.Cantidad) as enWindows10?
SumaCompras,;
SUM(ventas.cantidad) AS SumaVentas ;
FROM Compras ; Massobreelenviode
FULL JOIN Ventas ON Ventas.IdArticulo = Compras.IdArticulo ;
mensajesdecorreo
GROUP BY Ventas.idarticulo ; electrnicodesdeVisual
INTO CURSOR cResumen FoxPro

Envodecorreoelectrnico
porelservidorSMTPde
Aprimeravistaparecebuenalaidea,sumamos Gmail
todaslascandadesdecompras,todaslas
candadesdeventasdeunamezcladetodoslos Agregarcolumnasen
sentenciasSELECTSQL
registros,no?Perosabrasquepasa?:Nofunciona,
yaqueobtendremosdatosquenadaenenque VFPymySQL
ver,primeramenteporqueseestancualicandolas
tuplasdelatablaventascontralastuplasdela SQLSelectenVFPyTSQL
tablacompras,perontesequehayalgunosIDs
queestnenuna,peroquenoestnenlaotra, Formulariotransparente
masnoloscontroles
dandonoselsiguienteresultado: contenidos

ConsumiendoServicios
WebconMicrosoVisual
FoxPro

CrearPDFconVisual
FoxPro


https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 2/7
11/2/2017
ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?SELECTSQL

Visitas
Podrascomentar,"Yacasi",solomefaltelcodigo
002queesdelatablacomprasquenoestabaenla 9 0 9 6 7 2
tablaventas,hmmmsi,enefectoesasi,puedes
seguirintentandocambiarlasclausulasporLEFT Traductor
JOIN,RIGTHJOIN,cambiarVentas.Arculo= Seleccionaridioma
Compras.IdArculoporCompras.IdArculo=
Ventas.Arculoenlocorrespondientealaclusula
ON(delosoperadoresdeproyeccion),pero
obtendrsdiferentesresultadosqueseguirnsin
serlosqueesperabas.

Inclusive,puedesllegarapensarquetalvezel
operadordeigualdadsalesobrando,eintentasuna
msparaversifunciona:

SELECT ventas.idArticulo,;
SUM(ventas.cantidad) AS TotalVentas,;
SUM(compras.cantidad) AS TotalCompras ;
FROM ventas,compras ;
GROUP BY ventas.idArticulo ;
INTO CURSOR cReporte

Ytenemoselsiguienteresultado:

Quesucedi?,lamentablementealhacerlodeesta
formaseestulizandoimplicitamenteun
operadordeigualdadentrelasendades(INNER
JOIN),yesosintomarencuentaquelasumano
sonloquedeberiatener,porloquetampoco
obtenemosloquequeremos.

Entonces?Quesloquedebemoshacer?,la
solucinessencilla,elusodesubconsultas.Resulta
serqueelalgebradeconjunto(queeslateoraque
sustentaalaprccadeellenguajeSQL)eneun
pequeo"truco"paranormalizarestepequeo
desperfectoenloqueparecenotenersolucin.
Estoselellamansubconsultas(masadelante
veremosqueotrosnombresselesconoce).

Enelparrafoanteriorhicemencinauntemaque
esbasedeesto,lanormalizacin,envezde
intentarproyectarlascolumnasquesern
https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 3/7
11/2/2017 ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?SELECTSQL

calculadas(ennuestroejemplosesumaron,pero
bienpudieronhabersidocontadas)parallegaral
resultadoinmediato,debemoscrearunconjunto
dedatosintermedio,elcual,nosservirparaahora
siproyectarlocorrectamente:

SELECT idArticulo, 000000 as nCompras, Cantidad as nVentas ;


FROM Ventas ;
UNION ;
SELECT idArticulo, Cantidad as nCompras , 000000 as nVentas ;
FROM Compras ;
INTO CURSOR cResumen

Conelqueryanteriorobtendremosunconjuntode
datosnormalizadoscomoelquesigue:

Yasevaviendomejor?,claro!,ahoraaste
conjuntodedatosslolefaltarahaceruna
agrupacinysuma,paraquequedecomolo
deseamos:

SELECT idArticulo, SUM(nCompras) as TotalCompras ,;


SUM(nVentas) as TotalVentas ;
FROM cResumen ;
GROUP BY idArticulo ;
INTO CURSOR cReporte

Quedandocomosigue:

Ahorasi,llegamosalosresultadosdeseados
(puedeshacerlasumamanual,nomehe
equivocado:),comocomentabaeneliniciodel
arculoaveceses*NECESARIO*.Cabedestacar
queenlasconsultasheobviadolasclsulas

https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 4/7
11/2/2017 ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?SELECTSQL

WHERE,yaqueesdemasiadoobvioquesiempre
debernincluirseencadaunadelaconsultasque
hemosunido(conlaclasulaUNION).

Aprovechoestemomentodetuatencinpara
demostrarlamaneraenquetambinpodrser
realizadoconlaVFP9(laprximaversindel
producto),enlaquesepuedesimplicaranms
estasentenciaSQL:

SELECT codigo,;
SUM(cResumen.nCompras) AS TotalCompras ,;
SUM(cResumen.nVentas ) AS TotalVentas ;
FROM (SELECT codigo, ;
CAST(0 as Int) AS nCompras, Cantidas as nVentas ;
FROM Ventas ;
UNION ;
SELECT Codigo,;
Cantidad as nCompras, CAST(0 as Int) AS nVentas ;
FROM Compras ) cResumen ;
GROUP BY cResumen.Codigo ;
INTO CURSOR cReporte

Aquseharusodeloqueseledenomina
sentenciasanidadas,endondetenemosvarias
partesclave.

Enprimerlugarsepuedeapreciarqueseest
realizandounasentenciaanidadenalulizarcomo
cursordeprocedencia...otraconsulta!!FROM(
SELECT...),estonosdlaventajadepoderanidar
tantasconsultasseannecesarias.

Comosegundopuntoafavorestamosulizando
unadelasnuevasfunciones:CAST(),conella
prescindiremosdelostrucosquehemosestado
usandopara"forzar"quelascolumnascalculadas
deVFPtenganunpodedatos,anchooprecisin
queserequiera,envezdetenerqueulizarpor
ejemplo000000paraforzarquefueraunenterode
ancho6,ousar$0paraqueseadepoMoneda,y
unsinndeetceteras.

Conlacombinacindeambas,obtenemosuna
consultamascompacta,tepodrnpreguntarEn
qunosbeneciaeso?,enquedichaconsulta,si
endadomomentodeseapasarseaunservidorde
basededatos(porejemploMSSQLServer),la
transicinseamsligera,yaquedesdehace
muchoempoestosmanejanconsultasanidadasy
funcionesdeconversinexplcita.

https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 5/7
11/2/2017 ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?SELECTSQL

Quizsnodebemosdedejarpasarelhechoquea
vecespuedesercontraproducenteeltenertodoen
ununasolaconsulta,yaquetododependerde
cmoestnformadostusdatos,asiporejemplo,
pudierasernecesarioqueseparesenvarias
consultasparadarlemayorinteracvidadatu
aplicacin,porejemplo:

WAIT WINDOW "Buscando Ventas en el periodo... Espere" NOWAIT

SELECT idArticulo, 000000 as nCompras, Cantidad as nVentas ;


FROM Ventas ;
WHERE BETWEEN(Fecha, ldInicio, ldFinal) ;
INTO CURSOR cVentas ;

WAIT WINDOW "Buscando Compras en el periodo... Espere" NOWAIT

SELECT idArticulo, Cantidad as nVentas,000000 as nCompras ;


FROM Compras ;
WHERE BETWEEN(Fecha, ldInicio, ldFinal) ;
INTO CURSOR cCompras ;

WAIT WINDOW "Realizando resumen de Compra ventas... Espere" NOWAIT

SELECT * FROM cCompras ;


UNION ;
SELECT * FROM cVentas ;
INTO CURSOR cResumen

Asipues,entremspasosintermediosdejes,
puedesenviarmsmensajesatuusuario
indicndoqualgoseesthaciendo,yaqueen
cuantoelnmerodedatosempieceacrecerpuede
serunaposibilidadaquesevayatardandocada
vezms,porejemplo,silopruebascon1000
datos...serrapidsimo,peroencuantolleguesa
losmillonesderegistros,setardar,ymuchos
usuariossientenquedosotressegundosesun
mundo,ymientrassetardalospuedesanimarun
poquito,asnosedesesperarnyempiecena
"tronar"tuaplicacinporque"yanoresponda"...
Elcuntolasseparesounastelodejoatucriterio,
yaquesiempredependerdetucasoespecco.

Seacualsealasolucintomada,debemosresumir
losiguiente:Esunerrorcomnelpensarquetodo
sepuedehacerconunasolaconsultaSELECTSQL,
aveceshayqueutilizarsubconsultas(oconsultas
anidadas),ynosoloproyeccionesdirectas.

Esperoqueestepequeotutoriallesseade
ulidad.

https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 6/7
11/2/2017 ComunidaddeVisualFoxProenEspaol:Cmoycundousarsubconsultas...?SELECTSQL

EspartacoPalmaMartnez

Equetas:DBF


Recomendar esto en Google

1comentario:

Annimo 10denoviembrede2016,22:00
y que codigo deberia ulizar si necesito
encontrar el campo "Descripcion" si este se
encuentra en otra tabla para que se muestre
justocomolatabladeejemploqueestaalinicio
delarculo?
Responder

Escribeuncomentario...

Comentarcomo: Seleccionarperfil...

Publicar
Vistaprevia

Entradamsreciente Pgina Entradaangua


Principal

Suscribirsea:Comentariosdelaentrada(Atom)

Temas

AcveX(14) API(104)Arculos(57)Automaon(22)Clases(29)Cdigode
barras(11)DBF(55)Fechayhora(43)Formularios(69)GDI(38)General
(48)Informes(26)Internet(44)Libros(15)Nocias(9) Runas(84)SGDB
(52)Traducciones(166)Ulidades(33)VFPx(19)WMI(1)

ComunidadVisualFoxProenEspaol2017.ContecnologadeBlogger.

https://comunidadvfp.blogspot.com/2004/12/comoycuandousarsubconsultasselect.html 7/7

También podría gustarte