[firebase-br] RES: Union e Order by

Fabiana Thome fabiana.thome em tan.com.br
Qua Set 17 11:39:08 -03 2008


Nazareno,


creio que na sua tabela VENDAS deve haver mais alguma informação que indique
se o conteúdo do campo VENDAS.CODIGO_CLIENTE é referente à tabela CLIENTES
ou à tabela FORNECEDORES, ou ainda, os códigos não se repetem nas tabelas,
ou seja, somente haverá um cliente com código 1, nunca um fornecedor. Caso
contrário, há um problema de difícil solução. Senão vejamos: quando retornar
no select da tabela VENDAS o código 1 e ele pode ser de cliente ou
fornecedor, como saberá a qual se refere?

No UNION o resultado será: NOME                 CODIGO   VENDA
                          Carlos (cliente),        1     100,00
                          Azaléia (fornecedor),    1     100,00 

Neste caso a melhor maneira, ao meu ver, é utilizar o seguinte select:

SELECT VENDAS.*, CLIENTES.NOME, CAST(FORNECEDORES.NOME AS VARCHAR(50)) AS
FORNECEDORES.NOME
FROM VENDAS
LEFT OUTER JOIN CLIENTES ON (CLIENTES.CODIGO_CLIENTE =
VENDAS.CODIGO_CLIENTE)
LEFT OUTER JOIN FORNECEDORES ON (FORNECEDORES.CODIGO_FORNECEDOR =
VENDAS.CODIGO_CLIENTE)

Desta forma, caso os códigos não se repitam, você só precisa escolher o
campo que retornou com conteúdo (CLIENTES.NOME ou FORNECEDORES.NOME), caso
se repitam, você terá o número e valor de vendas correto, porém deve haver
outra informação que possibilite a você saber se a venda foi para cliente ou
para fornecedor.

Outra possibilidade é a utilização de CASE no select baseado no campo que
informa se a venda é para cliente ou fornecedor.


Fabiana Fiorini Thomé
 
T.A.N - Tecnologia Aplicada a Negocios Ltda Rua Princesa Isabel, 238 - Salas
103 a 106 Joinville - SC CEP 89.201-904
Fones: (47) 3423-0841 - (48) 4052-8338 - (21) 3527-0475 - (51) 4063-8423
Soluções Para Proteção, Concessão, Recuperação de Créditos, Gestão e
Automação do Varejo CRA-SC Número 0969-J
 
Mérito Lojista pela CNDL em 2004
Mérito Lojista pela CNDL em 2005
 
Microsoft Registered Member
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de nazareno neto
Enviada em: quarta-feira, 17 de setembro de 2008 10:03
Para: FireBase
Assunto: Re: [firebase-br] Union e Order by

Ainda estou com uma duvida, como faço para nao se repetir as vendas, quando
na venda eu posso fazer uma tanto pata um cliente quanto para um fornecedor?
segue o select, ja coloquei o DISTINCT, mas nao adianto de nada.

SELECT VENDAS.*,CLIENTES.NOME
FROM VENDAS
INNER JOIN CLIENTES ON (CLIENTES.CODIGO_CLIENTE = VENDAS.CODIGO_CLIENTE)

UNION

SELECT VENDAS.*,CAST(FORNECEDORES.NOME AS VARCHAR(50))
FROM VENDAS
INNER JOIN FORNECEDORES ON (FORNECEDORES.CODIGO_FORNECEDOR =
VENDAS.CODIGO_CLIENTE)


Nao existe relacionamento da venda com cliente, onde no campo
vendas.codigo_cliente pode tambem ter o codigo do fornecedor

Eu desisti do union, estou fazendo de outro modo, mas tiver como fazer com
union, vou partir para ele.

2008/9/17 Magno System <magno em speet.com.br>

> Complementando.
>
> Com o union se tiver mais de um registro com todos os campos com valores
> iguais só aparecerá 1. Se quiser que apareçam todos tem que usar UNION ALL
>
> ----- Original Message -----
> From: "Forrest(R)" <fernando.bg em gmail.com>
> To: <lista em firebase.com.br>
> Sent: Wednesday, September 17, 2008 9:38 AM
> Subject: Re: [firebase-br] Union e Order by
>
>
> nazareno neto wrote:
>
> > Sou novo na area de programação, e me deparei com uma situação que
> > preciso unir duas tabelas, mas tenho que obrigatoriamente ordenalas
> > pela minha chave primaria, estou tentado dar um order by, mas da o
> > seguinte erro:
> >
> > fmSQLEditor.Query:
> > Invalid token.
> > Dynamic SQL Error.
> > SQL error code = -104.
> > Invalid command.
> > invalid ORDER BY clause.
> >
> > Duvida: dapra usar Union e Order by juntos?
>
> Sim dá para usar sim, lembrando que você faz as uniões e o ordenação
> fica no final e utilize o indice do campo.
>
> select campo1, campo2, campo3 from tabelaA
> union
> select campo1, campo2, campo3 from tabelaB
> order by 1
>
> Não se esqueça que no union os campos tem que ter o mesmo tipo e nome.
> Qualquer duvida poste aí de novo.
>
> T++++++++++++++++++
>
> --
>
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista