Duvida em sql

12 respostas
manhanijava

Galera a dúvida agora vem no sql, desculpe estar postando neste fórum, mas quem sabe alguém não ajuda…

exemplo:
tabela: cliente
codigo nome sexo
1 A F
2 B F
3 C M
4 A F
5 E F
6 B F

Galera observando a tabela acima…fiz uma rotina pra imprimir mala direta, só que não queria repetir o NOME A NEM O NOME B, pois eles são iguais

usei a clausula DISTINCT.

só que usando a cláusula distinct ele traz somente a coluna em que eu apontar

exe:

SELECT DISTINCT nome FROM cliente

ele traz o resultado
A
B
C
E

só que eu gostaria que ele trouxesse
A F
B F
C M
E F

tipo trouxer o resultado de toda a linha e não só da coluna que eu fiz o distinct…alguém ajuda

12 Respostas

marcelo.bellissimo

Coloca ‘group by nome’ no final do seu select…

manhanijava

group by no final do select que mencionei acima??? se for ele continua trazendo só o campo que mencionei no distinct

marcelo.bellissimo

group by no final do select que mencionei acima??? se for ele continua trazendo só o campo que mencionei no distinct

Claro, você tá pedindo pra exibir só o nome… coloca os campos que você quer no select, assim:

SELECT nome, sexo FROM cliente GROUP BY nome, sexo

Nem precisa do distinct…

manhanijava

group by no final do select que mencionei acima??? se for ele continua trazendo só o campo que mencionei no distinct

Claro, você tá pedindo pra exibir só o nome… coloca os campos que você quer no select, assim:

SELECT nome, sexo FROM cliente GROUP BY nome, sexo

Nem precisa do distinct…

amigo eu agradeço a ajuda, mas não quero agrupar os nomes, eu quero distinct, pois não quero repetilos, só que no distinct só to conseguindo trazer uma coluna e não todas as colunas daquele registro

marcelo.bellissimo

Estuda pra que serve o GROUP BY…

A

Na verdade, para o seu caso, DISTINCT e GROUP BY são equivalentes…

Você pode fazer:

SELECT DISTINCT nome, sexo FROM clientes

ou

SELECT nome, sexo FROM clientes GROUP BY nome, sexo

Claro que se tiver dois clientes com o mesmo nome e sexos diferentes, ele trará duas linhas.

Só não entendo porque teria o mesmo cliente duas vezes na tabela. Tá estranha sua modelagem.

manhanijava

Ou seja, o group by serve para agrupar os resultados de uma consulta de acordo com uma coluna especificada. Além disso, você pode impor condições para os agrupamentos através do having.

pra que serve eu sei amigao, acho que vc não entendeu meu problema, mas grato pelas inumeras tentativas de ajuda

manhanijava

AbelBueno:
Na verdade, para o seu caso, DISTINCT e GROUP BY são equivalentes…

Você pode fazer:

SELECT DISTINCT nome, sexo FROM clientes

ou

SELECT nome, sexo FROM clientes GROUP BY nome, sexo

Claro que se tiver dois clientes com o mesmo nome e sexos diferentes, ele trará duas linhas.

Só não entendo porque teria o mesmo cliente duas vezes na tabela. Tá estranha sua modelagem.

ele pode aparecer na tabela varaias vezes pro que ele pode ter 3 ou 4 carros, pois é um sistema pra uma vendedora de seguros entende

marcelo.bellissimo

Ou seja, ele faz um DISTINCT implicitamente… agora, como falaram aí em cima, tá estranha essa modelagem, e você pode fazer dos dois jeitos, mas se houver valores diferentes na segunda coluna pra um mesmo nome, vai replicar o nome e criar outra linha com esse resultado, e não me parece isso que você quer, por isso que usei o group by, que agrupa o resultado porém esconde os resultados da outra coluna…

A

A sugestão funcionou?

Então provavelmente você deveria ter uma tabela de Clientes e uma tabela de Carros dos Clientes…

Com essa modelagem, é possível você ter o João com um CPF na primeira vez, com um outro na segunda, com sexo trocado, etc…

manhanijava

{RESOLVIDO}…

marcelo.bellissimo

AbelBueno:
A sugestão funcionou?

Então provavelmente você deveria ter uma tabela de Clientes e uma tabela de Carros dos Clientes…

Com essa modelagem, é possível você ter o João com um CPF na primeira vez, com um outro na segunda, com sexo trocado, etc…

Aproveitando o embalo, isso seria uma violação da 1FN (1ª forma normal) do banco de dados… dá uma estudada em Normalização em Banco de Dados, é uma boa…

Criado 2 de dezembro de 2010
Ultima resposta 2 de dez. de 2010
Respostas 12
Participantes 3