CONSULTA COM VARIOS REGISTROS PRIORIZADOS
Ola,
Estou fazendo uma consulta em duas tabelas: clientes e endereços. Na base certos clientes possuem apenas o endereço comercial, alguns apenas o de correspondencia, alguns apenas o residencial e outros tem comercial e residencial ou comercial e correspondencia ou correspondencia e residencial. Como consigo listar todos os clientes que possuem apenas endereço de correspondencia, ou apenas endereço comercial ou apenas endereço residencial. Se o cliente tiver mais de um endereço, gostaria de mostrar na ordem, apenas o de correspondencia, senão tiver esse mostra o comercial e se tambémn não tiver o comercial ai exibe o residencial.
As tabelas estão assim:
Clientes
ClienteID - Código do cliente
ClienteNome - NomeCliente
Enderecos
EnderecoID - Chave da tabela
EnderecoNome - Descrição do endereço
EnderecoTipo - Tipo do endereço, onde: 1=Residencial, 2=Comercial e 3=Correspondencia.
Alguem pod eme ajudar nessa consulta?
Estou fazendo uma consulta em duas tabelas: clientes e endereços. Na base certos clientes possuem apenas o endereço comercial, alguns apenas o de correspondencia, alguns apenas o residencial e outros tem comercial e residencial ou comercial e correspondencia ou correspondencia e residencial. Como consigo listar todos os clientes que possuem apenas endereço de correspondencia, ou apenas endereço comercial ou apenas endereço residencial. Se o cliente tiver mais de um endereço, gostaria de mostrar na ordem, apenas o de correspondencia, senão tiver esse mostra o comercial e se tambémn não tiver o comercial ai exibe o residencial.
As tabelas estão assim:
Clientes
ClienteID - Código do cliente
ClienteNome - NomeCliente
Enderecos
EnderecoID - Chave da tabela
EnderecoNome - Descrição do endereço
EnderecoTipo - Tipo do endereço, onde: 1=Residencial, 2=Comercial e 3=Correspondencia.
Alguem pod eme ajudar nessa consulta?
Qual o Banco de dados?
SQL Server, MySQL, ACCESS, etc?
SQL Server, MySQL, ACCESS, etc?
Ola,
O banco de dados é sql server 2000.
Grato.
O banco de dados é sql server 2000.
Grato.
Então, vamos nessa:
1. Em algum lugar vc tem que ter uma ligação entre os endereços e o Cliente. Assumi que na table Enderecos você tenha o campo ClienteId para poder ligar ambos.
2. O SELECT abaixo lista somente os clientes que tenham pelo menos 1 endereço cadastrado.
1. Em algum lugar vc tem que ter uma ligação entre os endereços e o Cliente. Assumi que na table Enderecos você tenha o campo ClienteId para poder ligar ambos.
2. O SELECT abaixo lista somente os clientes que tenham pelo menos 1 endereço cadastrado.
SELECT cli.*, End3.*
FROM Clientes Cli (NOLOCK)
INNER JOIN (SELECT MIN(EnderecoTipo) EndTipo, ClienteId
FROM Enderecos End1 (NOLOCK)
GROUP BY ClienteId) End2
ON End2.ClienteId = Cli.ClienteId
INNER JOIN Enderecos End3 (NOLOCK)
ON End3.ClienteId = End3.ClienteId
AND End3.EnderecoTipo = End2.EndTipo
ORDER BY Cli.ClienteNome, Cli.ClienteId
Precisaria que a consulta liste os registros que tenhas o endereço tipo 3, se o registro não tem o endereço tipo 3, então e xibe o tipo 2 e se não tem os tipos 3 ou 2, aà exibe o tipo1. Todos os clientes da base possuem ao menos um endereço que é do tipo 3, 2 ou 1. A consulta deve exibir registros exclusivos, não deve exibir registros com o mesmo ClienteID.
Pô, era só inverter o MIN para MAX... Tudo bem, ai vai
SELECT cli.*, End3.*
FROM Clientes Cli (NOLOCK)
INNER JOIN (SELECT MAX(EnderecoTipo) EndTipo, ClienteId
FROM Enderecos End1 (NOLOCK)
GROUP BY ClienteId) End2
ON End2.ClienteId = Cli.ClienteId
INNER JOIN Enderecos End3 (NOLOCK)
ON End3.ClienteId = End3.ClienteId
AND End3.EnderecoTipo = End2.EndTipo
ORDER BY Cli.ClienteNome, Cli.ClienteId
E ai, resolveu?
Se sim, fecha o tópico e pontua; Se não, manda a dúvida que a gente ajuda.
Se sim, fecha o tópico e pontua; Se não, manda a dúvida que a gente ajuda.
Valeu,
Como adaptar o seu ótimo exemplo com os campos da minha tabela?
Clientes
ClienteID - Código do cliente
ClienteNome - NomeCliente
Enderecos
EnderecoID - Chave da tabela
EnderecoNome - Descrição do endereço
EnderecoTipo - Tipo do endereço, onde: 1=Residencial, 2=Comercial e 3=Correspondencia.
Valewu!!
Como adaptar o seu ótimo exemplo com os campos da minha tabela?
Clientes
ClienteID - Código do cliente
ClienteNome - NomeCliente
Enderecos
EnderecoID - Chave da tabela
EnderecoNome - Descrição do endereço
EnderecoTipo - Tipo do endereço, onde: 1=Residencial, 2=Comercial e 3=Correspondencia.
Valewu!!
Não se trata de adaptar o meu código mas sim de saber COMO você sabe que o endereço pertence a um cliente. Vc não tem [Ô]ClienteID[Ô] na tabela [Ô]Enderecos[Ô] então, terá que ter uma terceira tabela em que relaciona o [Ô]Clientes->ClienteID[Ô] com [Ô]Enderecos->EnderecoID[Ô] senão, não dá para ligar as tabelas.
Como vc faz ??
O mais fácil seria mudar a tabela enderecos para:
Como vc faz ??
O mais fácil seria mudar a tabela enderecos para:
Enderecos
EnderecoID - Chave da tabela
ClienteID - Chave do Cliente
EnderecoNome - Descrição do endereço
EnderecoTipo - Tipo do endereço, onde: 1=Residencial, 2=Comercial e 3=Correspondencia.
Valeu de novo...
A tabela enderecos tem o campo clienteid. Vou postar as duvidas qto ao seu codigo:
- Duvida 1
SELECT cli.*, End3.*
FROM Clientes Cli (NOLOCK)...
O que é esse Cli em negrito?
- Duvida 2
...FROM Enderecos End1 (NOLOCK)
E esse End1?
valeu de novo pela ajuda cara
A tabela enderecos tem o campo clienteid. Vou postar as duvidas qto ao seu codigo:
- Duvida 1
SELECT cli.*, End3.*
FROM Clientes Cli (NOLOCK)...
O que é esse Cli em negrito?
- Duvida 2
...FROM Enderecos End1 (NOLOCK)
E esse End1?
valeu de novo pela ajuda cara
Esses são ALIAS das tabelas... Só isso.
Declarando um ALIAS, toda a indicação à tabela (ou campo) passa a ser pelo ALIAS e não pelo NOME.
Ex.: Enderecos.EnderecoID passa a ser End1.EnderecoID.
Além do mais, como precisa referenciar os ENDERECOS por duas vezes, e mais uma vez como Sub-Querie, precisa de ALIAS senão como poderá individualizá-los? Assim, é mencionado por 3 vezes e eu resolvi chamar de END1, END2 e END3 mas poderia ser XPP, TFR e MIMI45 ou qquer outro que te der na telha....
Declarando um ALIAS, toda a indicação à tabela (ou campo) passa a ser pelo ALIAS e não pelo NOME.
Ex.: Enderecos.EnderecoID passa a ser End1.EnderecoID.
Além do mais, como precisa referenciar os ENDERECOS por duas vezes, e mais uma vez como Sub-Querie, precisa de ALIAS senão como poderá individualizá-los? Assim, é mencionado por 3 vezes e eu resolvi chamar de END1, END2 e END3 mas poderia ser XPP, TFR e MIMI45 ou qquer outro que te der na telha....
Tópico encerrado , respostas não são mais permitidas