Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

x_confused

Como retornar registros únicos com GROUP BY?

Recommended Posts

Bom dia pessoal. Preciso executar um SELECT que me retorne registros únicos. Estou fazendo assim:

SELECT QTD_PARCELAS, PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB
            
            FROM   FORMAS_DE_PAGAMENTO 
            
            WHERE  AO_EXIBE_WEB = 'S'
            AND    TP_PAGTO_WEB = 'C'
            
            GROUP BY QTD_PARCELAS, PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB
            ORDER BY QTD_PARCELAS ASC

Está me retornando o seguinte:

 

1 3 0 C AMEX

2 6 0 C DINERS

3 6 0 C MASTERCARD

4 12 0 C VISA

 

Notem que ele está retornando 2 registros com o mesmo número de parcelas.

 

Se mudar meu select para esta forma ele funciona, no entanto só me retorna o campo QTD_PARCELAS. No meu caso preciso do valor de todos os outros campos também (PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB)

SELECT QTD_PARCELAS
            
            FROM   FORMAS_DE_PAGAMENTO 
            
            WHERE  AO_EXIBE_WEB = 'S'
            AND    TP_PAGTO_WEB = 'C'
            
            GROUP BY QTD_PARCELAS
            ORDER BY QTD_PARCELAS ASC

Também tentei utilizar o DISTINCT mas obtive os mesmos resultados. Se alguém puder me ajudar, ficarei grato.

 

Att.

 

Giuliano.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está me retornando o seguinte:

 

1 3 0 C AMEX

2 6 0 C DINERS

3 6 0 C MASTERCARD

4 12 0 C VISA

 

Notem que ele está retornando 2 registros com o mesmo número de parcelas.

O mesmo nº de parcelas mas para FORMAS DE PAGTO diferentes, como se precisa que os dados sejam exibidos ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, obrigado pela resposta. Acho que consegui corrigir o erro. Ele estava retornando assim:

 

1 3 0 C AMEX

2 6 0 C MASTERCARD

3 6 0 C DINERS

4 12 0 C VISA

 

Mas na verdade, eu percebi que não precisava do último campo. Portando deixei meu select assim:

 

SELECT QTD_PARCELAS, PERC_JUROS
            
            FROM   FORMAS_DE_PAGAMENTO 
            
            WHERE  AO_EXIBE_WEB = 'S'
            AND    TP_PAGTO_WEB = 'C'
            
            GROUP BY QTD_PARCELAS, PERC_JUROS
            ORDER BY QTD_PARCELAS ASC

E retornou corretamente:

 

1 3 0

2 6 0

3 12 0

 

Mas agora deixe eu perguntar. Se eu quisesse que no resultado acima ele retornasse isso:

 

1 3 0 C AMEX

2 6 0 C MASTERCARD

4 12 0 C VISA

 

Como deveria ser feito o SELECT?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez um MAX em cima da query original

 

+OU- ISTO

 


select *
from
(SELECT QTD_PARCELAS, PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB
 FROM   FORMAS_DE_PAGAMENTO 
 WHERE  AO_EXIBE_WEB = 'S'
 AND    TP_PAGTO_WEB = 'C'
 GROUP BY QTD_PARCELAS, PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB) t1
where t1.FORMA_PAGTO_WEB = (SELECT MAX(T2.FORMA_PAGTO_WEB) 
                            FROM
                     		(SELECT QTD_PARCELAS, PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB
                             FROM   FORMAS_DE_PAGAMENTO 
                             WHERE  AO_EXIBE_WEB = 'S'
                             AND    TP_PAGTO_WEB = 'C'
                             GROUP BY QTD_PARCELAS, PERC_JUROS, TP_PAGTO_WEB, FORMA_PAGTO_WEB) t2
							WHERE  T1.QTD_PARCELAS = T2.QTD_PARCELAS 
                            AND  T1.PERC_JUROS = T2.PERC_JUROS
                            AND  T1.TP_PAGTO_WEB = T2.TP_PAGTO_WEB)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.