Bom dia galera, sou novo aqui no fórum e aprendendo SQL, podem me ajudar a resolver esta query?
Preciso transformar o campo "periodo" em coluna, andei pesquisando e tentei usar o PIVOT, mas não consegui encaixá-lo na query:
SELECT
DISTINCT VEN.APELIDO,
TO_CHAR(CAB.DTNEG, 'YYYY"/"MM') AS PERIODO,
SUM (CASE WHEN (CAB.CODTIPOPER IN (40,44,50,47,87)) THEN ITE.QTDNEG
WHEN (CAB.CODTIPOPER IN (13,53,45,58)) THEN ( ITE.QTDNEG * (-1) ) ELSE 0
END )QUANTIDADE
FROM TGFCAB CAB
JOIN TGFITE ITE ON (ITE.NUNOTA = CAB.NUNOTA )
JOIN TGFPRO PRO ON (PRO.CODPROD = ITE.CODPROD)
JOIN TGFVEN VEN ON (VEN.CODVEND=CAB.CODVEND)
WHERE
(CAB.STATUSNFE = 'A' OR CAB.CODTIPOPER IN (13,53,45,58))
AND (PRO.REFERENCIA IS NOT NULL OR (PRO.REFERENCIA IS NULL AND CAB.CODPARC = '4925' ))
AND PRO.USOPROD 'M'
AND CAB.CODTIPOPER IN (40,44,50,47,87,13,53,45,58)
AND CAB.DTNEG BETWEEN :PERIODO.INI AND :PERIODO.FIN
AND (CAB.CODVEND = :VENDEDOR OR :VENDEDOR IS NULL)
AND (PRO.CODPROD = :CODIGOPROD OR :CODIGOPROD IS NULL)
AND (CAB.CODEMP =:EMPRESA OR :EMPRESA IS NULL)
AND CAB.CODVEND 0
GROUP BY VEN.APELIDO, TO_CHAR(CAB.DTNEG, 'YYYY"/"MM')
ORDER BY PERIODO DESC
Este é o resultado da query de acordo com PERIODO e outros dados informados pelo usuário nas variáveis:
APELIDO PERIODO QUANTIDADE
DAVI.REP 12/2015 29
EDSON.REP 12/2015 487
JOSE.REP 12/2015 366
SALVADOR.REP 12/2015 707
DAVI.REP 01/2016 50
EDSON.REP 01/2016 122
JOSE.REP 01/2016 75
SALVADOR.REP 01/2016 373
Mas preciso desta forma:
APELIDO 12/2015 01/2016
DAVI.REP 29 50
EDSON.REP 487 122
JOSE.REP 366 75
SALVADOR.REP 707 373