GARANTIR DESCONTO

Fórum Juntar duas consultas SQL em uma #55530

20/03/2006

0

Caros colegas,

Gostaria de transformar os dois Selects abaixo em apenas um.

Select NOME, ENDERECO, BAIRRO, CEP, CIDADE, UF, NASC, OBS, FONE
from CADCLI
Where extract(day from NASC) between :diaIni and :diaFim
and extract(month from NASC) between :mesIni and :mesFim;


Select CONJUGE, ENDERECO, BAIRRO, CEP, CIDADE, UF, NAS_CO, OBS, FONE
from CADCLI
Where extract(day from NAS_CO) between :diaIni and :diaFim
and extract(month from NAS_CO) between :mesIni and :mesFim;


Ou seja, verifico o nascimento do cliente ou do conjuge para ver se um
deles esta fazendo aniver e gostaria de ter apenas 1 dataset para os
relatórios.

Obrigado,

Marcello.

[color=green:718a13af9d]Movido de Delphi para Interbase/Firebird[/color:718a13af9d]


Marcello

Marcello

Responder

Posts

20/03/2006

Paullsoftware

já tentou assim:

Select NOME, CONJUGE, ENDERECO, BAIRRO, CEP, CIDADE, UF, NASC, NAS_CO,OBS, FONE 
from CADCLI 
Where
    extract(day from NASC) between :diCli and :dfCli
and
    extract(month from NASC) between :miCli and :mfCli 
and 
   extract(day from NAS_CO) between :diCo and :dfCo
and
   extract(month from NAS_CO) between :miCo and :mfCo


não testei mais deve funcionar! :wink:


Responder

Gostei + 0

20/03/2006

Marcello

O problema é q vou usar estes dados para emitir cartas de aniversário, ou para o cliente ou para o seu conjugê - quem estiver aniversariando. Então o campo nome teria q armazenar um dos dois.
Não me adianta ter um dataset com o Nome e o Conjugê.

Vc tem alguma idéia para esta situação ?


Responder

Gostei + 0

20/03/2006

Gandalf.nho

Select NOME, ENDERECO, BAIRRO, CEP, CIDADE, UF, NASC, OBS, FONE 
from CADCLI 
Where extract(day from NASC) between :diaIni and :diaFim 
and extract(month from NASC) between :mesIni and :mesFim
UNION
Select CONJUGE, ENDERECO, BAIRRO, CEP, CIDADE, UF, NAS_CO, OBS, FONE 
from CADCLI 
Where extract(day from NAS_CO) between :diaIni and :diaFim 
and extract(month from NAS_CO) between :mesIni and :mesFim



Responder

Gostei + 0

21/03/2006

Marcello

Galdalf.nho,

Não consegui rodar este SQL com UNION. Ainda estou usando Interbase 6, será isso ?

O erro é SQL error code = -104. Token unknown.


Responder

Gostei + 0

22/03/2006

Marcello

Caros colegas,

Descobri q não posso usar UNION pois apesar dos dados serem de mesmo tipo e tamanho, seus nomes são diferentes - NOME/CONJUGE e NASC/NAS_CO.

Será q alguém tem alguma outra idéia ? :cry:

Obrigado.

Marcello


Responder

Gostei + 0

22/03/2006

Thiago Vidal

já tentou... ?

Select NOME, ENDERECO, BAIRRO, CEP, CIDADE, UF, NASC, OBS,
...
UNION
Select CONJUGE as NOME, ENDERECO, BAIRRO, CEP, CIDADE, UF, NAS_CO as NASC, OBS,
...



Responder

Gostei + 0

22/03/2006

Gandalf.nho

O nome dos campos não tem nada a ver, o importante é serem do mesmo tipo e tamanho. Experimente UNION ALL ao invés de UNION


Responder

Gostei + 0

22/03/2006

Marcello

Cara, tá complicado !!!

Realmente os nome dos campos não tem nada a ver.
Troquei os campos NOME e CONJUGE por outros dois (PAI e MAE) e mantive NASC e NAS_CO e funcionou perfeitamente.

Só q se eu volto os campos NOME (VARCHAR(50)) e CONJUGE (VARCHAR(50)) da o erro Token unknown.

Realmente não sei mais o q fazer. :cry:

Gostaria q se alguém passou por isto me desse uma luz.

Marcello.


Responder

Gostei + 0

22/03/2006

Gandalf.nho

Vc testou individualmente os 2 SELECTs?


Responder

Gostei + 0

22/03/2006

Marcello

Sim, testei os dois selects e deu certinho.
Inclusive funcionou o UNION, só q com outros campos da tabela e não com o NOME e CONJUGE.


Responder

Gostei + 0

22/03/2006

Digitom

Select NOME, ENDERECO, BAIRRO, CEP, CIDADE, UF, NASC, OBS, FONE
from [color=red:712f1e7e8c]CADCLI[/color:712f1e7e8c]
Where extract(day from NASC) between :diaIni and :diaFim
and extract(month from NASC) between :mesIni and :mesFim;

Select CONJUGE, ENDERECO, BAIRRO, CEP, CIDADE, UF, NAS_CO, OBS, FONE
from [color=red:712f1e7e8c]CADCLI[/color:712f1e7e8c]
Where extract(day from NAS_CO) between :diaIni and :diaFim
and extract(month from NAS_CO) between :mesIni and :mesFim;

Não sei se você colou e copiou os arquivos aqui, mas veja que no seus FROM voce colocou CADCLI para os conjuges e para cadcli.
Se realmente for CADCLI para dois FROMs utilize assim



Select [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]NOME, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]ENDERECO, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]BAIRRO, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]CEP, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]CIDADE, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]UF, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]NASC, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]OBS, [color=red:712f1e7e8c]cli.[/color:712f1e7e8c]FONE
from CADCLI [color=red:712f1e7e8c]cli[/color:712f1e7e8c]
Where extract(day from NASC) between :diaIni and :diaFim
and extract(month from NASC) between :mesIni and :mesFim;

Select [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]CONJUGE, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]ENDERECO, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]BAIRRO, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]CEP, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]CIDADE, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]UF, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]NAS_CO, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]OBS, [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]FONE
from CADCLI [color=red:712f1e7e8c]conj.[/color:712f1e7e8c]
Where extract(day from NAS_CO) between :diaIni and :diaFim
and extract(month from NAS_CO) between :mesIni and :mesFim;



Veja meu exemplo é quase o mesmo, usando o firebird, e deu certo:

Select clicod, clirazao, clidatacadast, ´cliente´ as Tabela from clientes Where extract(day from clidatacadast) between :diaIni and :diaFim and extract(month from clidatacadast) between :mesIni and :mesFim union Select balccod, balcnome, balccad, ´balconi´ as tabela from balconistas Where extract(day from balccad) between :diaIni and :diaFim and extract(month from balccad) between :mesIni and :mesFim



Responder

Gostei + 0

23/03/2006

Marcello

Tentei cfe o digitom sugeriu e nada - o erro persiste.

Interessante foi q troquei o Firebird 1.5.2.4731 pelo Firebird 2.0 beta 2 e daí funcionou com uma ressalva - ele trouxe um registro com todos os campos null (não existem registros null na minha tabela).

To abandonando o UNION - vou tentar de outro jeito.

Agradeço os colegas.

Marcello.


Responder

Gostei + 0

23/03/2006

Gandalf.nho

Estranho isso, deveria funcionar. Bem, uma alternativa ao UNION que vc pode tentar é usar uma SP para unir os SELECTs.


Responder

Gostei + 0

23/03/2006

Marcello

gandalf.nho

Vc poderia me dar um exemplo de SP unindo selects ?

Havia pensado nisto, mas não tenho muita experiência em SP e não consegui fazer. :oops:

Obrigado,

Marcello.


Responder

Gostei + 0

24/03/2006

Gandalf.nho

Vc pode tentar algo assim no corpo da SP:

FOR Select NOME, ENDERECO, BAIRRO, CEP, CIDADE, UF, NASC, OBS, FONE from CADCLI Where extract(day from NASC) between :diaIni and :diaFim and extract(month from NASC) between :mesIni and :mesFim INTO  :NOME, :ENDERECO, :BAIRRO, :CEP, :CIDADE, :UF, :NASC, :OBS,  :FONE DO
  SUSPEND;
FOR Select CONJUGE, ENDERECO, BAIRRO, CEP, CIDADE, UF, NAS_CO, OBS, FONE from CADCLI Where extract(day from NAS_CO) between :diaIni and :diaFim and extract(month from NAS_CO) between :mesIni and :mesFim INTO  :NOME, :ENDERECO, :BAIRRO, :CEP, :CIDADE, :UF, :NASC, :OBS,  :FONE DO
  SUSPEND;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar