Pular para o conteúdo

Fóruns SQL e PL/SQL Select + Group By Select + Group By

#90982
fsitja
Participante

    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.