Fórum seleção em duas tabelas, linha a linha, é possivel? #236063

04/06/2004

0

tenho duas tabelas:
1- Financeiro
Data
Controle_Cliente
Historico
Valor
2- Pedidos
Data
Controle_Cliente
Referencia
Valor

gostaria de atraves de uma seleção pelo controle_cliente listar os dados do financeiro e os dados dos pedidos mais um abaixo do outro ordernado por data!!!! é possivel????
para montar um relatorio!


Mrcdlf

Mrcdlf

Responder

Posts

04/06/2004

Crash

SELECT * FROM FINANCEIRO, PEDIDOS WHERE PEDIDOS.CONTROLE_CLIENTE= FINANCEIRO.CONTORLE_CLIENTE
ORDER BY CONTROLE_CLIENTE, DATA


Vc vai colocar no QuickRep uma banda de Grupo e na expression dela vc coloca o campo CONTROLE_CLIENTE.

e Pronto

t+


Responder

Gostei + 0

04/06/2004

Mrcdlf

SELECT * FROM FINANCEIRO, PEDIDOS WHERE PEDIDOS.CONTROLE_CLIENTE= FINANCEIRO.CONTORLE_CLIENTE
ORDER BY CONTROLE_CLIENTE, DATA
Vc vai colocar no QuickRep uma banda de Grupo e na expression dela vc coloca o campo CONTROLE_CLIENTE. e Pronto t+


ok mais ai ele fará um produto cartesiano entre financeiro e pedidos, certo?
o problema é que quero pegar um apos o outro sem repetição
exemplo:
*tabela financeiro*
data controle valor
01/06/2004 2 12,2
06/06/2004 3 10,0
*tabela pedido*
data controle valor
02/06/2004 2 12,2
03/06/2004 2 16,0
06/06/2004 3 10,0

resultado que desejo:
data controle valor
01/06/2004 2 12,2 <- tabela financeiro
02/06/2004 2 12,2 <- tabela pedido
03/06/2004 2 16,0 <- tabela pedido

na verdade gostaria de jogar o valor do pedido negativo para no final saber qual o saldo do clienten, entendeu? um contas correntes...


Responder

Gostei + 0

04/06/2004

Paulo_amorim

Olá

Se eu entendi ceerto, utilize UNION

SELECT controle_cliente, valor FROM financeiro ORDER BY data
UNION
SELECT controle_cliente, valor FROM pedido ORDER BY data

Espero que ajude
Até+


Responder

Gostei + 0

04/06/2004

Mrcdlf

Olá Se eu entendi ceerto, utilize UNION SELECT controle_cliente, valor FROM financeiro ORDER BY data UNION SELECT controle_cliente, valor FROM pedido ORDER BY data Espero que ajude Até+


ISSO!

quer dizer quase isso... :( só mais alguns ajustes :D

tenho uma duvida, para fazer a união os campos precisam ser iguais???
exemplo: se na tabela pedido tiver um campo que não tenha na tabela financeiro eu não poderei apresentar ele???


Responder

Gostei + 0

04/06/2004

Paulo_amorim

Olá

No UNION só importa o TIPO

se vc tem 3 campos na t1 e 2 campos na t2, por exemplo, vc pode fazer:

SELECT t1.campo1, t1.campo2, t1.campo3 FROM t1
UNION
SELECT t2.campo1, t2.campo2, ´´ campo3 FROM t2

Observe que no ex. acima não existe ´campo3´ , então eu seleciono um valor vazio qualquer...
Os campos campo1 e campo2, entretanto, devem ser do mesmo tipo (char, number, etc...)

Espero que ajude

Até+


Responder

Gostei + 0

04/06/2004

Mrcdlf

Olá No UNION só importa o TIPO se vc tem 3 campos na t1 e 2 campos na t2, por exemplo, vc pode fazer: SELECT t1.campo1, t1.campo2, t1.campo3 FROM t1 UNION SELECT t2.campo1, t2.campo2, ´´ campo3 FROM t2 Observe que no ex. acima não existe ´campo3´ , então eu seleciono um valor vazio qualquer... Os campos campo1 e campo2, entretanto, devem ser do mesmo tipo (char, number, etc...) Espero que ajude Até+


Olá Paulo,

valeu pelas dicas!!! tem ajudado bastante


agora esse campo vazio aqui não funcionou esta dando erro...

se eu usar exemplo: campo3 numeric em t1 e não existir em t2 seria

SELECT t1.campo3 FROM t1
UNION
SELECT ´´ campo3 FROM t2

???

aqui isso não funcionou... usa aspa simples e não tem ponto?


Responder

Gostei + 0

04/06/2004

Adilsond

SELECT t1.campo1, t1.campo2, t1.campo3 FROM t1
UNION
SELECT t2.campo1, t2.campo2, null FROM t2
ORDER BY 1 <- este comando vem apenas no final da uniao

Obs: Não adianta colocar apelido nos campos das demais seleções, pois será dado o nome aos campos sempre da primeira query do union.


Responder

Gostei + 0

05/06/2004

Mrcdlf

SELECT t1.campo1, t1.campo2, t1.campo3 FROM t1 UNION SELECT t2.campo1, t2.campo2, null FROM t2 ORDER BY 1 <- este comando vem apenas no final da uniao Obs: Não adianta colocar apelido nos campos das demais seleções, pois será dado o nome aos campos sempre da primeira query do union.



esse campo null não funciona aqui!!!!
???


Responder

Gostei + 0

05/06/2004

Adilsond

Veja o que voce solicitou ????

[list:ea1b470e31]*tabela financeiro*
data controle valor
01/06/2004 2 12,2
06/06/2004 3 10,0
*tabela pedido*
data controle valor
02/06/2004 2 12,2
03/06/2004 2 16,0
06/06/2004 3 10,0

resultado que desejo:
data controle valor
01/06/2004 2 12,2 <- tabela financeiro
02/06/2004 2 12,2 <- tabela pedido
03/06/2004 2 16,0 <- tabela pedido[/list:u:ea1b470e31]

Então sua query ficaria assim:

SELECT DATA AS DATA, CONTROLE_CLIENTE AS CONTROLE, VALOR AS VALOR
FROM FINANCEIRO
UNION ALL
SELECT DATA, CONTROLE_CLIENTE, VALOR
FROM PEDIDOS
ORDER BY 1, 2


Agora, se não é isto o que desejas, então infórme o que desejas realmente.


Responder

Gostei + 0

05/06/2004

Mrcdlf

Veja o que voce solicitou ???? [list:03b03196c3]*tabela financeiro* data controle valor 01/06/2004 2 12,2 06/06/2004 3 10,0 *tabela pedido* data controle valor 02/06/2004 2 12,2 03/06/2004 2 16,0 06/06/2004 3 10,0 resultado que desejo: data controle valor 01/06/2004 2 12,2 <- tabela financeiro 02/06/2004 2 12,2 <- tabela pedido 03/06/2004 2 16,0 <- tabela pedido[/list:u:03b03196c3] Então sua query ficaria assim:
SELECT DATA AS DATA, CONTROLE_CLIENTE AS CONTROLE, VALOR AS VALOR
FROM FINANCEIRO
UNION ALL
SELECT DATA, CONTROLE_CLIENTE, VALOR
FROM PEDIDOS
ORDER BY 1, 2
Agora, se não é isto o que desejas, então infórme o que desejas realmente.


bem é isso mesmo que queria... só que ai surgiu outra duvida... os campos tem que ser de mesmo tipo, por acaso ou posso selecinar um que não exista em outra tabela!? essa foi a duvida...
mais quanto ao que desejava inicialmente era aquilo mesmo!

só mai suma duvida... quando vc colcou ´order by 1,2´ seguinfica o q? tudo bem ordernar... mais 1,2?


Responder

Gostei + 0

05/06/2004

Adilsond

só que ai surgiu outra duvida... os campos tem que ser de mesmo tipo, por acaso ou posso selecinar um que não exista em outra tabela!?


Depende do seu banco. Se for paradox, dbase, Interbase utilize o CAST para converter para o tipo desejado. Se for Oracle, DB2 utilize o NULL para trazer nulo no lugar do campo desejado.

só mai suma duvida... quando vc colcou ´order by 1,2´ seguinfica o q? tudo bem ordernar... mais 1,2?


Qdo voce utiliza o union voce não mandar ordenar pelo nome da coluna. O order by aceita voce informar qual a coluna que deseja ordenar pelo índice, começando com 1.

Order by 1, 2 quer dizer, ordene primeiramente pela primeira coluna e em seguida pela sugunda coluna.


Responder

Gostei + 0

06/06/2004

Mrcdlf

[quote:2811506eea]só que ai surgiu outra duvida... os campos tem que ser de mesmo tipo, por acaso ou posso selecinar um que não exista em outra tabela!?


Depende do seu banco. Se for paradox, dbase, Interbase utilize o CAST para converter para o tipo desejado. Se for Oracle, DB2 utilize o NULL para trazer nulo no lugar do campo desejado.

só mai suma duvida... quando vc colcou ´order by 1,2´ seguinfica o q? tudo bem ordernar... mais 1,2?


Qdo voce utiliza o union voce não mandar ordenar pelo nome da coluna. O order by aceita voce informar qual a coluna que deseja ordenar pelo índice, começando com 1.

Order by 1, 2 quer dizer, ordene primeiramente pela primeira coluna e em seguida pela sugunda coluna.[/quote:2811506eea]

o banco é firebird

o cast faz conversão de tipos??? mesmo que seja do mesmo tipo só que com limites diferentes?


Responder

Gostei + 0

06/06/2004

Adilsond

o cast faz conversão de tipos???

Sim

mesmo que seja do mesmo tipo só que com limites diferentes?

Sim

De uma olhada, para saber mais sobre este comando, no help ´Local SQL Guide´ que vem com o delphi.


Responder

Gostei + 0

06/06/2004

Mrcdlf

[quote:f605fd9731]o cast faz conversão de tipos???

Sim

mesmo que seja do mesmo tipo só que com limites diferentes?

Sim

De uma olhada, para saber mais sobre este comando, no help ´Local SQL Guide´ que vem com o delphi.[/quote:f605fd9731]


ok vou dar uma olhada
valeu!!!


Responder

Gostei + 0

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

Aceitar