Dúvida SQL

8 respostas
J

Boa tarde

Estou fazendo uma aplicação, e em um certo momento faço uma consulta ao banco de dados ex.:

select nome, numero_nota, parcela from notafiscas

me retorna:
jose, 10, 01
maria, 22, 01
maria, 22, 02
maria, 22,03
joao, 55,05

minha dúvida é a seguinte como faço para eliminar os itens em que (nome e numero_nota) se repetissem ex:

me retorna:
jose, 10, 01
maria, 22,03
joao, 55,05

Se alguém puder me ajudar agradeço.

vlw

8 Respostas

pmlm

Qual é a parcela que queres? Pelo teu exemplo presumo que seja a maior, assim podes fazer:

SELECT nome, numero_nota, max(parcela) as parcela from notasfiscas group by 1,2
ViniGodoy

Usa um WHERE parcela = 1?

J

Obrigado

Usando a solução do amigo, pmlm ocorre o seguinte erro:

A coluna 'contrato_parcelas.Data_do_Pagto' é inválida na lista de seleção porque não está contida em uma função agregada nem na cláusula GROUP BY.

pmlm

Qual o SQL completo que tentas executar?

J

de uma maneira resumida;

SELECT 
	cl.codempresa,
	cl.codcliente,
	cl.razao_social, 
	cp.codempresa, 
                 cp.codcliente,
	cp.datapagto 
FROM contratoparcelas AS cp
INNER JOIN clientes AS cl ON
cp.codempresa = cl.codempresa AND
cp.codcliente = cl.codcliente

WHERE 
	cp.datapagto = 0 AND
	cp.codcliente > 0
xjunior

SELECT nome, numero_nota, parcela from notaficais group by nome,numero_nota

pmlm

Todas as colunas que não queres repetidas têm de estar no GROUP BY.
Para as restantes tens de definir qual o valor que queres que apareça (MAX, MIN, SUM…)

B

jony:
Estou fazendo uma aplicação, e em um certo momento faço uma consulta ao banco de dados ex.:

select nome, numero_nota, parcela from notafiscas

me retorna:
jose, 10, 01
maria, 22, 01
maria, 22, 02
maria, 22,03
joao, 55,05

minha dúvida é a seguinte como faço para eliminar os itens em que (nome e numero_nota) se repetissem ex:

me retorna:
jose, 10, 01
maria, 22,03
joao, 55,05

Aí você tem um problema, você quer eliminar itens repetidos, mas os dados da última coluna não se repetem, ou seja, todos os registros que está trazendo são únicos. Soluções:

  • Tirar a última coluna, e fazer um select distinct
  • Fazer um where que selecione somente um valor da última coluna, mas isto talvez elimine registros que você queria que estivessem lá.
  • Usar um operador de agrupamento para escolher qual dos valores da última coluna valerá por todos. MAX, MIN, AVG, etc.
Criado 12 de fevereiro de 2010
Ultima resposta 12 de fev. de 2010
Respostas 8
Participantes 5