Fórum seleção em duas tabelas, linha a linha, é possivel? #236063
04/06/2004
0
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
Curtir tópico
+ 0Posts
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+
Gostei + 0
04/06/2004
Mrcdlf
SELECT * FROM FINANCEIRO, PEDIDOS WHERE PEDIDOS.CONTROLE_CLIENTE= FINANCEIRO.CONTORLE_CLIENTE ORDER BY CONTROLE_CLIENTE, DATA
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...
Gostei + 0
04/06/2004
Paulo_amorim
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é+
Gostei + 0
04/06/2004
Mrcdlf
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???
Gostei + 0
04/06/2004
Paulo_amorim
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é+
Gostei + 0
04/06/2004
Mrcdlf
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?
Gostei + 0
04/06/2004
Adilsond
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.
Gostei + 0
05/06/2004
Mrcdlf
esse campo null não funciona aqui!!!!
???
Gostei + 0
05/06/2004
Adilsond
[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.
Gostei + 0
05/06/2004
Mrcdlf
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
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?
Gostei + 0
05/06/2004
Adilsond
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.
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.
Gostei + 0
06/06/2004
Mrcdlf
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.
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?
Gostei + 0
06/06/2004
Adilsond
Sim
Sim
De uma olhada, para saber mais sobre este comando, no help ´Local SQL Guide´ que vem com o delphi.
Gostei + 0
06/06/2004
Mrcdlf
Sim
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!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)