Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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?
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)
>
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 ?