› Fóruns › SQL e PL/SQL › Select + Group By › Select + Group By
Deveria trazer os dados corretos se você colocar os nomes no group by, a menos que a junção tenha buscado 2 nomes (ou nenhum nome) para fornecedor, por exemplo.
Se o caso for que não tem correspondente na tabela de nomes, tente um left outer join. Se estiver vindo mais de uma linha, verifique o relacionamento entre as tabelas, se não está faltando uma coluna no where para ligar.
Fora isso, o que você poderia fazer é colocar sua query versão funcionando como sub-query na sua query “versão cosmética”, no from dela, fazendo join com a tabela de nomes.
SELECT MOVCLI.COD_CLIENTE,
MOVCLI.COD_FORNECEDOR,
FORNEC.FORNECEDOR,
MOVCLI.VALOR_VENDA
FROM (
SELECT
MOV.CODCLI AS COD_CLIENTE,
MOV.CODFORNEC AS COD_FORNECEDOR,
SUM(MOV.QT * MOV.PTABELA) AS VALOR_VENDA
FROM PCMOV MOV, PCCLIENT CLI
WHERE
MOV.CODCLI IN (SELECT CODCLI FROM PCCLIENT WHERE CODUSUR1 = 93)
AND MOV.CODFORNEC != 0
AND MOV.DTMOV BETWEEN '01102009' AND '31102009'
GROUP BY MOV.CODFORNEC) movcli
LEFT JOIN PCFORNEC FORNEC ON FORNEC.CODFORNEC = MOVCLI.COD_FORNECEDOR
Fiquei com uma dúvida. No where você compara MOV.DTMOV com strings ‘01102009’. Esse campo é data ou é varchar2? Se for data, use to_date(‘01102009’, ‘DDMMYYYY’) na comparação para evitar erros caso a configuração de NLS_DATE_FORMAT seja alterada no servidor.