Select sobre Select, como fazer?
26/12/2005
0
Estou com uma duvida em como devo proceder para poder
efetuar uma consulta em cima de outra.
Por exemplo tenho um ´jogo´ SDS,DSP,CDS,DTS que pesquisa sobre a tabela de notas fiscais emitidas. Agora preciso fazer uma nova pesquisa com o resultado da primeira.
Tem como fazer isso usando o mesmo componete, mas sem perder os dados ja retornados?
Ou preciso de um novo ´jogo´? E caso verdade, como faço a ´ligação´ entre eles.
Agradeço a atenção. :roll:
Macario
Posts
26/12/2005
Edilcimar
26/12/2005
Macario
select A.EMP, A.CLI, A.NFI, A.DAT, A.NOP, A.NPE, A.CDPG, A.CDESA,A.DESCICMS, A.IRENDA, A.SERVICOS, B.DESPAG, C.EFEITOVEN,C.PIS,C.FINSOCIAL, D.V2 as DESCLI, D.V4 as MUNICIPIO, D.V5 as CODEST, D.TCL as CODSEG, D.TCL2, D.ZONA ,D.VEN_DIRETA, E.CSG as CODSEG,E.NSG as DESSEG, F.CSG as CODCLA,F.NSG as DESCLA,G.DESZONA, H.NOMEEST as ESTADO, I.NNF, I.NCL, I.NEM, I.QTE, I.VLR, I.QTECE, I.VLRCE, I.PRO, I.IPI, I.PED, I.DNF, I.NRE,I.ICMS, I.ENCPRO, I.ENCIPI, I.ENCFIN,I.PCO, I.NTIPOCOM,I.NCOMVLRMAS,I.ALI_ICMS,I.PAI,I.PORDEM,I.NDESPADMAS,I.NBONUS,I.IDNF, J.V2 as DESREP, K.A2 as DESPRO,K.FATCONV,K.PLIQ,K.GRUPO,K.SGRUPO,K.CODFAB, L.DESCRICAO as UNIDADE, (I.QTE*.K.PLIQ) as PESO_PRO from ARQNFIS A left join ARQCPAG B on (A.CDPG=B.CODPAG) left join ARQNOPS C on (A.NOP=C.NOX) left join ARQCLIE D on (A.CLI=D.V1) left join ARQTCLI E on (D.TCL=E.CSG) left join ARQCCLI F on (D.TCL2=F.CSG) left join ARQZONA G on (D.ZONA=G.CODZONA) left join ARQESTA H on (D.V5=H.CODEST) left join ARQPRNF I on (A.NFI=I.NNF) left join ARQREPR J on (I.NRE=J.V1) left join ARQMER K on (I.PRO=K.A1) left join ARQUNID L on (K.A3=L.COD) where A.EMP = ´001´ and D.V0 = ´001´ and I.NEM = ´001´ and A.DAT between ´01/07/2005´ and ´31/07/2005´ and A.CLI >= ´02238´ and A.CLI <= ´09347´ and A.CDPG >= ´´ and A.CDPG <= ´064´ and (C.EFEITOVEN = ´S´ or C.EFEITOVEN = ´D´) and A.CDESA = ´N´ and D.TCL >= ´01´ and D.TCL <= ´99´ and D.TCL2 >= ´01´ and D.TCL2 <= ´99´ and D.ZONA>= ´00´ and D.ZONA <= ´99´ and I.PRO >= ´002000000000´ and I.PRO <= ´010999999999´ and I.NRE >= ´001´ and I.NRE <= ´999´
Do select acima, eu preciso fazer um agrupamento +/- assim
select nfi,dnf,codcli,descli,nop,sum(totpro)as totpro,sum(vlrtot)as vlrtot,sum(icmstot) as icmstot, sum(pistot)as pistot,sum(cofinstot)as cofinstot,sum(ipi)as ipi,sum(fre)as fre,sUM(VLRTOT) AS LIQUIDO from AQUI_PRIMEIRO_SELECT group by nfi,dnf,codcli,descli,noP
:roll:
P.S: apriveitando, se algum puder me dizer se o primeiro select ta legal ou eu poderia melhora-lo.
26/12/2005
Eixox
Aqui você usará uma única select para pesquisar vários parâmetros
Select SUM(Campos) from tabela
Where campo = ´SDS´
Select SUM(Outro) from OutraTabela
Where campos = ´DSP´
Tudo num única select.
Era isso que ocê queria?
27/12/2005
Aroldo Zanela
Use uma View (mais fácil) ou uma subquery com o operador IN.
27/12/2005
Martins
Use uma View (mais fácil) ou uma subquery com o operador IN.[/quote:5a3b0c5685]Aê [b:5a3b0c5685]Zanela[/b:5a3b0c5685], fazia um tempinho q vc não aparecia por aqui, mandando bem como sempre.
27/12/2005
Macario
porem acho que não fui muito claro.
Citando um exemplo mais simples, digamos que eu faça um select na tabela de clientes onde o filtro inicial seria o estado = SP, a partir dai eu gostaria de fazer outras consultas como por exemplo pegar apenas os clientes com limite de credito > 1000, mas fazendo um select em cima dos registros da primeira consulta: select * from PRIMEIRA_CONSULTA where limite_credito > 1000
É isso que não sei se é possivel fazer ou como devo fazer.
27/12/2005
Andremuller
se for SQLServer por exemplo é só fazer
SELECT * FROM ( SELECT * FROM CLIENTE WHERE ESTADO = SP ) WHERE LIMITECREDITO > 1000
27/12/2005
Andremuller
tem que dar um alias pro result set do from, senão não funciona.
Fica então
SELECT * FROM ( SELECT * FROM CLIENTE WHERE ESTADO = SP ) CONS1 WHERE LIMITECREDITO > 1000
Inclusive tu pode referenciar esse CONS1 como se fosse uma tabela, fazendo inner join por exemplo
04/01/2006
Macario
SELECT * FROM ( SELECT * FROM CLIENTE WHERE ESTADO = SP ) WHERE LIMITECREDITO > 1000
Olá andremuller.
O banco o SQL 2000.
Bom acho que para o meu ´problema´ não vou ter solução.
Apos efetuar o select acima, eu estou passando os dados para um segundo ClientDataSet, no qual estou usando como tabela temporaria, pois efetuo verificações de parametros usando if que não sei fazer via SQL, pois não tenho muito conhecimento para montar selects mais ´parrudos´.
Então creio que não seja possivel efetuar um select sobre esse temporario.
Estive pensando sobre as tabelas temporarias no proprio SGBD.
O que me indicam?
outra duvida minha
ver link: [url=http://forum.clubedelphi.net/viewtopic.php?t=71940&start=0&postdays=0&postorder=asc&highlight=/]Utilização do metodo ClientDataSet.CreateDataSet?[/url]
05/01/2006
Andremuller
Talvez se tu postar tudo que tu precisa seja possível dar algumas dicas de como montar a busca toda em sql
Clique aqui para fazer login e interagir na Comunidade :)