1082 lines
30 KiB
MySQL
1082 lines
30 KiB
MySQL
----------------------------
|
|
fCategoria
|
|
----------------------------
|
|
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -LEVEL) AS MES_ANALISE,
|
|
ADD_MONTHS(
|
|
TRUNC(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -LEVEL), 'MM'),
|
|
-11
|
|
) AS DATA_INICIO,
|
|
LAST_DAY(
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -LEVEL)
|
|
) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
PARAMETROS AS (
|
|
SELECT
|
|
MAX(CASE WHEN NOME = 'CON_FREQUENCIACLIENTE'
|
|
THEN VALOR END) AS CON_FREQUENCIACLIENTE,
|
|
MAX(CASE WHEN NOME = 'CON_FATURAMENTOCATCLIENTE'
|
|
THEN VALOR END) AS CON_FATURAMENTOCATCLIENTE
|
|
FROM PCPARAMFILIAL
|
|
),
|
|
PARAM_CATEGORIA_TICKET AS (
|
|
SELECT
|
|
500 AS LIM_TICKET_VALOR,
|
|
3 AS LIM_TICKET_FREQUENCIA
|
|
FROM DUAL
|
|
),
|
|
FATURAMENTO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
SUM(NF.VLATEND) AS FATURAMENTO_BRUTO,
|
|
SUM(NF.VLCUSTOFIN) AS CUSTO_BRUTO
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
DEVOLUCAO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
SUM(DV.VLDEVOLUCAO) AS DEVOLUCAO,
|
|
SUM(DV.VLCMVDEVOL) AS CUSTO_DEVOL
|
|
FROM VIEW_DEVOL_RESUMO_FATURAMENTO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTENT BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE DV.DTCANCEL IS NULL
|
|
AND DV.CONDVENDA IN (1,7)
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI
|
|
),
|
|
FREQUENCIA AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
COUNT(DISTINCT NF.NUMTRANSVENDA) AS FREQUENCIA
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
FREQ_VENDEDOR AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
NF.CODUSUR AS CODVEND,
|
|
COUNT(DISTINCT NF.NUMTRANSVENDA) AS FREQUENCIA_VENDEDOR
|
|
FROM PCNFSAID NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
NF.CODUSUR
|
|
),
|
|
VENDEDOR_PRINCIPAL AS (
|
|
SELECT
|
|
V.ID_PERIODO,
|
|
V.CODCLI,
|
|
V.CODVEND,
|
|
U.NOME AS NOME_VENDEDOR,
|
|
V.FREQUENCIA_VENDEDOR,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY V.ID_PERIODO, V.CODCLI
|
|
ORDER BY V.FREQUENCIA_VENDEDOR DESC
|
|
) AS RN
|
|
FROM FREQ_VENDEDOR V
|
|
LEFT JOIN PCUSUARI U
|
|
ON U.CODUSUR = V.CODVEND
|
|
),
|
|
BASE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
TO_CHAR(P.MES_REF,'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
F.CODCLI,
|
|
CLI.CLIENTE,
|
|
CASE
|
|
WHEN CLI.TIPOFJ = 'F' THEN 'Física'
|
|
WHEN CLI.TIPOFJ = 'J' THEN 'Jurídica'
|
|
ELSE 'Não informado'
|
|
END AS TIPO_PESSOA,
|
|
NVL(FR.FREQUENCIA,0) AS FREQUENCIA,
|
|
NVL(F.FATURAMENTO_BRUTO,0) AS FATURAMENTO_BRUTO,
|
|
NVL(D.DEVOLUCAO,0) AS DEVOLUCAO,
|
|
NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0) AS FATURAMENTO_LIQUIDO,
|
|
NVL(F.CUSTO_BRUTO,0) - NVL(D.CUSTO_DEVOL,0) AS CUSTO_LIQUIDO,
|
|
ROUND(
|
|
(
|
|
(NVL(F.FATURAMENTO_BRUTO,0))
|
|
- (NVL(F.CUSTO_BRUTO,0))
|
|
)
|
|
/
|
|
NULLIF((NVL(F.FATURAMENTO_BRUTO,0)),0),
|
|
4) AS PERCENT_MARGEM,
|
|
ROUND(
|
|
NVL(F.FATURAMENTO_BRUTO,0)
|
|
/
|
|
NULLIF(FR.FREQUENCIA,0),
|
|
2) AS TICKET_MEDIO,
|
|
VP.CODVEND AS CODVEND_PRINCIPAL,
|
|
VP.NOME_VENDEDOR AS VENDEDOR_PRINCIPAL,
|
|
VP.FREQUENCIA_VENDEDOR,
|
|
ROUND(
|
|
VP.FREQUENCIA_VENDEDOR
|
|
/
|
|
NULLIF(FR.FREQUENCIA,0),
|
|
4) AS PERC_COMPRAS_VENDEDOR_PRINCIPAL,
|
|
P2.CON_FATURAMENTOCATCLIENTE,
|
|
P2.CON_FREQUENCIACLIENTE,
|
|
PC.LIM_TICKET_VALOR,
|
|
PC.LIM_TICKET_FREQUENCIA
|
|
FROM PERIODOS P
|
|
JOIN FATURAMENTO F ON F.ID_PERIODO = P.ID_PERIODO
|
|
JOIN PCCLIENT CLI ON CLI.CODCLI = F.CODCLI
|
|
LEFT JOIN DEVOLUCAO D ON D.ID_PERIODO = F.ID_PERIODO AND D.CODCLI = F.CODCLI
|
|
LEFT JOIN FREQUENCIA FR ON FR.ID_PERIODO = F.ID_PERIODO AND FR.CODCLI = F.CODCLI
|
|
LEFT JOIN VENDEDOR_PRINCIPAL VP
|
|
ON VP.ID_PERIODO = F.ID_PERIODO
|
|
AND VP.CODCLI = F.CODCLI
|
|
AND VP.RN = 1
|
|
CROSS JOIN PARAMETROS P2
|
|
CROSS JOIN PARAM_CATEGORIA_TICKET PC
|
|
)
|
|
SELECT
|
|
ID_PERIODO,
|
|
PERIODO_REFERENCIA,
|
|
CODCLI,
|
|
CLIENTE,
|
|
TIPO_PESSOA,
|
|
FREQUENCIA,
|
|
FATURAMENTO_BRUTO,
|
|
DEVOLUCAO,
|
|
FATURAMENTO_LIQUIDO,
|
|
CUSTO_LIQUIDO,
|
|
TICKET_MEDIO,
|
|
CODVEND_PRINCIPAL,
|
|
VENDEDOR_PRINCIPAL,
|
|
FREQUENCIA_VENDEDOR,
|
|
PERC_COMPRAS_VENDEDOR_PRINCIPAL,
|
|
CASE
|
|
WHEN FATURAMENTO_LIQUIDO > CON_FATURAMENTOCATCLIENTE
|
|
AND FREQUENCIA > CON_FREQUENCIACLIENTE
|
|
THEN 'DIAMANTE'
|
|
WHEN FATURAMENTO_LIQUIDO > CON_FATURAMENTOCATCLIENTE
|
|
AND FREQUENCIA <= CON_FREQUENCIACLIENTE
|
|
THEN 'OURO'
|
|
WHEN FATURAMENTO_LIQUIDO <= CON_FATURAMENTOCATCLIENTE
|
|
AND FREQUENCIA > CON_FREQUENCIACLIENTE
|
|
THEN 'PRATA'
|
|
ELSE 'BRONZE'
|
|
END AS CATEGORIA_FATURAMENTO,
|
|
CASE
|
|
WHEN TICKET_MEDIO > LIM_TICKET_VALOR
|
|
AND FREQUENCIA > LIM_TICKET_FREQUENCIA
|
|
THEN 'DIAMANTE'
|
|
WHEN TICKET_MEDIO > LIM_TICKET_VALOR
|
|
AND FREQUENCIA <= LIM_TICKET_FREQUENCIA
|
|
THEN 'OURO'
|
|
WHEN TICKET_MEDIO <= LIM_TICKET_VALOR
|
|
AND FREQUENCIA > LIM_TICKET_FREQUENCIA
|
|
THEN 'PRATA'
|
|
ELSE 'BRONZE'
|
|
END AS CATEGORIA_TICKET,
|
|
PERCENT_MARGEM
|
|
FROM BASE
|
|
WHERE CODCLI NOT IN (1,2)
|
|
ORDER BY
|
|
ID_PERIODO,
|
|
FATURAMENTO_LIQUIDO DESC;
|
|
|
|
|
|
--------------------------
|
|
fTopProdCli
|
|
--------------------------
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL+10)) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
ITENS_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
M.CODPROD,
|
|
PR.DESCRICAO AS PRODUTO,
|
|
SUM(M.QT) AS QTD_VENDIDA,
|
|
SUM(M.QT * M.PUNIT) AS FATURAMENTO_PRODUTO,
|
|
SUM(M.QT * M.CUSTOFIN) AS CUSTO_PRODUTO
|
|
FROM PCNFSAID NF
|
|
JOIN PCMOV M
|
|
ON M.NUMTRANSVENDA = NF.NUMTRANSVENDA
|
|
JOIN PCPRODUT PR
|
|
ON PR.CODPROD = M.CODPROD
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
AND NF.CODCLI NOT IN (1,2)
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
M.CODPROD,
|
|
PR.DESCRICAO
|
|
),
|
|
DEVOLUCAO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
DV.CODPROD,
|
|
SUM(DV.VLDEVOLUCAO) AS VLR_DEVOLUCAO
|
|
FROM VIEW_DEVOL_RESUMO_FATURAMENTO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTENT BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
DV.CODPROD
|
|
),
|
|
BASE AS (
|
|
SELECT
|
|
I.ID_PERIODO,
|
|
I.MES_REF,
|
|
I.CODCLI,
|
|
I.CODPROD,
|
|
I.PRODUTO,
|
|
I.QTD_VENDIDA,
|
|
I.FATURAMENTO_PRODUTO,
|
|
I.CUSTO_PRODUTO,
|
|
(I.FATURAMENTO_PRODUTO - NVL(D.VLR_DEVOLUCAO,0)) AS FATURAMENTO_LIQUIDO
|
|
FROM ITENS_CLIENTE I
|
|
LEFT JOIN DEVOLUCAO D
|
|
ON D.ID_PERIODO = I.ID_PERIODO
|
|
AND D.CODCLI = I.CODCLI
|
|
AND D.CODPROD = I.CODPROD
|
|
),
|
|
BASE_FILTRADA AS (
|
|
SELECT *
|
|
FROM BASE
|
|
WHERE FATURAMENTO_LIQUIDO > 0
|
|
),
|
|
RANKED AS (
|
|
SELECT
|
|
ID_PERIODO,
|
|
MES_REF,
|
|
CODCLI,
|
|
CODPROD,
|
|
PRODUTO,
|
|
QTD_VENDIDA,
|
|
FATURAMENTO_LIQUIDO,
|
|
CUSTO_PRODUTO,
|
|
(FATURAMENTO_LIQUIDO - CUSTO_PRODUTO) AS LUCRO_PRODUTO,
|
|
ROUND(
|
|
(FATURAMENTO_LIQUIDO - CUSTO_PRODUTO)
|
|
/ FATURAMENTO_LIQUIDO,
|
|
4) AS MARGEM_PERC,
|
|
ROW_NUMBER() OVER (
|
|
PARTITION BY ID_PERIODO, CODCLI
|
|
ORDER BY FATURAMENTO_LIQUIDO DESC
|
|
) AS POSICAO
|
|
FROM BASE_FILTRADA
|
|
)
|
|
SELECT
|
|
ID_PERIODO,
|
|
TO_CHAR(MES_REF, 'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
CODCLI,
|
|
CODPROD,
|
|
PRODUTO,
|
|
QTD_VENDIDA,
|
|
FATURAMENTO_LIQUIDO,
|
|
CUSTO_PRODUTO,
|
|
LUCRO_PRODUTO,
|
|
MARGEM_PERC,
|
|
POSICAO
|
|
FROM RANKED
|
|
WHERE POSICAO <= 5
|
|
ORDER BY
|
|
CODCLI,
|
|
POSICAO;
|
|
|
|
|
|
----------------------
|
|
fTopProdCateg
|
|
----------------------
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL+10)) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
PARAMETROS AS (
|
|
SELECT
|
|
MAX(CASE WHEN NOME = 'CON_FREQUENCIACLIENTE'
|
|
THEN VALOR END) AS CON_FREQUENCIACLIENTE,
|
|
MAX(CASE WHEN NOME = 'CON_FATURAMENTOCATCLIENTE'
|
|
THEN VALOR END) AS CON_FATURAMENTOCATCLIENTE
|
|
FROM PCPARAMFILIAL
|
|
),
|
|
FATURAMENTO_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
SUM(NF.VLATEND) AS FATURAMENTO_BRUTO
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI
|
|
),
|
|
DEVOLUCAO_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
SUM(DV.VLVENDA) * -1 AS DEVOLUCAO
|
|
FROM VB_DEVOLUCAO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTVENDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI
|
|
),
|
|
FREQUENCIA_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
COUNT(NF.NUMNOTA) AS FREQUENCIA
|
|
FROM PCNFSAID NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
CLIENTES_CATEGORIZADOS AS (
|
|
SELECT
|
|
F.ID_PERIODO,
|
|
F.MES_REF,
|
|
F.CODCLI,
|
|
(NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0)) AS FATURAMENTO_LIQUIDO,
|
|
NVL(FR.FREQUENCIA,0) AS FREQUENCIA,
|
|
CASE
|
|
WHEN (NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0)) > P.CON_FATURAMENTOCATCLIENTE
|
|
AND NVL(FR.FREQUENCIA,0) > P.CON_FREQUENCIACLIENTE
|
|
THEN 'DIAMANTE'
|
|
WHEN (NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0)) > P.CON_FATURAMENTOCATCLIENTE
|
|
AND NVL(FR.FREQUENCIA,0) <= P.CON_FREQUENCIACLIENTE
|
|
THEN 'OURO'
|
|
WHEN (NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0)) <= P.CON_FATURAMENTOCATCLIENTE
|
|
AND NVL(FR.FREQUENCIA,0) > P.CON_FREQUENCIACLIENTE
|
|
THEN 'PRATA'
|
|
ELSE 'BRONZE'
|
|
END AS CATEGORIA_CLIENTE
|
|
FROM FATURAMENTO_CLIENTE F
|
|
LEFT JOIN DEVOLUCAO_CLIENTE D
|
|
ON D.ID_PERIODO = F.ID_PERIODO
|
|
AND D.CODCLI = F.CODCLI
|
|
LEFT JOIN FREQUENCIA_CLIENTE FR
|
|
ON FR.ID_PERIODO = F.ID_PERIODO
|
|
AND FR.CODCLI = F.CODCLI
|
|
CROSS JOIN PARAMETROS P
|
|
),
|
|
ITENS_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
M.CODPROD,
|
|
PR.DESCRICAO AS PRODUTO,
|
|
SUM(M.QT) AS QTD_VENDIDA,
|
|
SUM(M.QT * M.PUNIT) AS FATURAMENTO_PRODUTO,
|
|
SUM(M.QT * M.CUSTOFIN) AS CUSTO_PRODUTO
|
|
FROM PCNFSAID NF
|
|
JOIN PCMOV M ON M.NUMTRANSVENDA = NF.NUMTRANSVENDA
|
|
JOIN PCPRODUT PR ON PR.CODPROD = M.CODPROD
|
|
JOIN PERIODOS P ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
AND PR.CODPROD NOT IN (48500)
|
|
AND PR.DESCRICAO NOT LIKE '++%'
|
|
AND PR.DESCRICAO NOT LIKE '$%'
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
M.CODPROD,
|
|
PR.DESCRICAO
|
|
),
|
|
PRODUTOS_POR_CATEGORIA AS (
|
|
SELECT
|
|
C.ID_PERIODO,
|
|
C.MES_REF,
|
|
C.CATEGORIA_CLIENTE,
|
|
I.CODPROD,
|
|
I.PRODUTO,
|
|
SUM(I.QTD_VENDIDA) AS QTD_TOTAL,
|
|
SUM(I.FATURAMENTO_PRODUTO) AS FAT_TOTAL,
|
|
SUM(I.CUSTO_PRODUTO) AS CUSTO_TOTAL
|
|
FROM ITENS_CLIENTE I
|
|
JOIN CLIENTES_CATEGORIZADOS C
|
|
ON C.ID_PERIODO = I.ID_PERIODO
|
|
AND C.CODCLI = I.CODCLI
|
|
GROUP BY
|
|
C.ID_PERIODO,
|
|
C.MES_REF,
|
|
C.CATEGORIA_CLIENTE,
|
|
I.CODPROD,
|
|
I.PRODUTO
|
|
),
|
|
RANKED AS (
|
|
SELECT
|
|
ID_PERIODO,
|
|
MES_REF,
|
|
CATEGORIA_CLIENTE,
|
|
CODPROD,
|
|
PRODUTO,
|
|
QTD_TOTAL,
|
|
FAT_TOTAL,
|
|
CUSTO_TOTAL,
|
|
ROUND(
|
|
CASE
|
|
WHEN FAT_TOTAL > 0
|
|
THEN (FAT_TOTAL - CUSTO_TOTAL) / FAT_TOTAL
|
|
ELSE 0
|
|
END
|
|
, 4) AS MARGEM_PERC,
|
|
RANK() OVER (
|
|
PARTITION BY ID_PERIODO, CATEGORIA_CLIENTE
|
|
ORDER BY FAT_TOTAL DESC
|
|
) AS POSICAO
|
|
FROM PRODUTOS_POR_CATEGORIA
|
|
)
|
|
SELECT
|
|
ID_PERIODO,
|
|
TO_CHAR(MES_REF, 'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
CATEGORIA_CLIENTE,
|
|
POSICAO,
|
|
CODPROD,
|
|
PRODUTO,
|
|
QTD_TOTAL,
|
|
FAT_TOTAL,
|
|
CUSTO_TOTAL,
|
|
MARGEM_PERC
|
|
FROM RANKED
|
|
WHERE POSICAO <= 20
|
|
ORDER BY
|
|
ID_PERIODO,
|
|
CATEGORIA_CLIENTE,
|
|
POSICAO;
|
|
|
|
|
|
|
|
----------------------------
|
|
fTopProdCategTicket
|
|
----------------------------
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL+10)) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
PARAM_CATEGORIA_TICKET AS (
|
|
SELECT
|
|
500 AS LIM_TICKET_VALOR,
|
|
3 AS LIM_TICKET_FREQUENCIA
|
|
FROM DUAL
|
|
),
|
|
FATURAMENTO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
SUM(NF.VLATEND) AS FATURAMENTO_BRUTO
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
DEVOLUCAO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
SUM(DV.VLDEVOLUCAO) AS DEVOLUCAO
|
|
FROM VIEW_DEVOL_RESUMO_FATURAMENTO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTENT BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE DV.DTCANCEL IS NULL
|
|
AND DV.CONDVENDA IN (1,7)
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI
|
|
),
|
|
FREQUENCIA AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
COUNT(DISTINCT NF.NUMTRANSVENDA) AS FREQUENCIA
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
CLIENTE_TICKET AS (
|
|
SELECT
|
|
F.ID_PERIODO,
|
|
F.CODCLI,
|
|
(NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0)) AS FATURAMENTO_LIQUIDO,
|
|
FR.FREQUENCIA,
|
|
ROUND(
|
|
(NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0))
|
|
/ NULLIF(FR.FREQUENCIA,0),
|
|
2) AS TICKET_MEDIO,
|
|
CASE
|
|
WHEN ROUND(
|
|
(NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0))
|
|
/ NULLIF(FR.FREQUENCIA,0),2
|
|
) >= PT.LIM_TICKET_VALOR
|
|
AND FR.FREQUENCIA >= PT.LIM_TICKET_FREQUENCIA
|
|
THEN 'DIAMANTE'
|
|
WHEN ROUND(
|
|
(NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0))
|
|
/ NULLIF(FR.FREQUENCIA,0),2
|
|
) < PT.LIM_TICKET_VALOR
|
|
AND FR.FREQUENCIA >= PT.LIM_TICKET_FREQUENCIA
|
|
THEN 'PRATA'
|
|
WHEN ROUND(
|
|
(NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0))
|
|
/ NULLIF(FR.FREQUENCIA,0),2
|
|
) >= PT.LIM_TICKET_VALOR
|
|
AND FR.FREQUENCIA < PT.LIM_TICKET_FREQUENCIA
|
|
THEN 'OURO'
|
|
ELSE 'BRONZE'
|
|
END AS CATEGORIA_TICKET
|
|
FROM FATURAMENTO F
|
|
LEFT JOIN DEVOLUCAO D
|
|
ON D.ID_PERIODO = F.ID_PERIODO
|
|
AND D.CODCLI = F.CODCLI
|
|
LEFT JOIN FREQUENCIA FR
|
|
ON FR.ID_PERIODO = F.ID_PERIODO
|
|
AND FR.CODCLI = F.CODCLI
|
|
CROSS JOIN PARAM_CATEGORIA_TICKET PT
|
|
),
|
|
ITENS_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
M.CODPROD,
|
|
PR.DESCRICAO AS PRODUTO,
|
|
SUM(M.QT * M.PUNIT) AS FATURAMENTO_PRODUTO,
|
|
SUM(M.QT * M.CUSTOFIN) AS CUSTO_PRODUTO
|
|
FROM PCNFSAID NF
|
|
JOIN PCMOV M ON M.NUMTRANSVENDA = NF.NUMTRANSVENDA
|
|
JOIN PCPRODUT PR ON PR.CODPROD = M.CODPROD
|
|
JOIN PERIODOS P ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
AND PR.CODPROD NOT IN (48500)
|
|
AND PR.DESCRICAO NOT LIKE '++%'
|
|
AND PR.DESCRICAO NOT LIKE '$%'
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
NF.CODCLI,
|
|
M.CODPROD,
|
|
PR.DESCRICAO
|
|
),
|
|
PRODUTO_CATEGORIA AS (
|
|
SELECT
|
|
I.ID_PERIODO,
|
|
I.MES_REF,
|
|
C.CATEGORIA_TICKET,
|
|
I.CODPROD,
|
|
I.PRODUTO,
|
|
SUM(I.FATURAMENTO_PRODUTO) AS FAT_TOTAL,
|
|
SUM(I.CUSTO_PRODUTO) AS CUSTO_TOTAL
|
|
FROM ITENS_CLIENTE I
|
|
JOIN CLIENTE_TICKET C
|
|
ON C.ID_PERIODO = I.ID_PERIODO
|
|
AND C.CODCLI = I.CODCLI
|
|
GROUP BY
|
|
I.ID_PERIODO,
|
|
I.MES_REF,
|
|
C.CATEGORIA_TICKET,
|
|
I.CODPROD,
|
|
I.PRODUTO
|
|
),
|
|
RANKED AS (
|
|
SELECT
|
|
ID_PERIODO,
|
|
TO_CHAR(MES_REF,'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
CATEGORIA_TICKET,
|
|
CODPROD,
|
|
PRODUTO,
|
|
FAT_TOTAL,
|
|
ROUND(
|
|
CASE
|
|
WHEN FAT_TOTAL > 0
|
|
THEN (FAT_TOTAL - CUSTO_TOTAL) / FAT_TOTAL
|
|
ELSE 0
|
|
END,
|
|
4) AS MARGEM_PERC,
|
|
RANK() OVER (
|
|
PARTITION BY ID_PERIODO, CATEGORIA_TICKET
|
|
ORDER BY FAT_TOTAL DESC
|
|
) AS POSICAO
|
|
FROM PRODUTO_CATEGORIA
|
|
)
|
|
SELECT *
|
|
FROM RANKED
|
|
WHERE POSICAO <= 20
|
|
ORDER BY
|
|
ID_PERIODO,
|
|
CATEGORIA_TICKET,
|
|
POSICAO;
|
|
|
|
|
|
---------------------------------
|
|
DIM_PERIODO
|
|
---------------------------------
|
|
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)),'MM'), -11) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM,
|
|
TO_CHAR(
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)),
|
|
'MM/YYYY'
|
|
) AS PERIODO_REFERENCIA,
|
|
EXTRACT(YEAR FROM ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS ANO,
|
|
EXTRACT(MONTH FROM ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS MES,
|
|
TO_CHAR(
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)),
|
|
'Month',
|
|
'NLS_DATE_LANGUAGE=PORTUGUESE'
|
|
) AS NOME_MES,
|
|
TO_CHAR(
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)),
|
|
'YYYY/MM'
|
|
) AS ANO_MES,
|
|
CASE
|
|
WHEN EXTRACT(MONTH FROM ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) BETWEEN 1 AND 3 THEN 'Q1'
|
|
WHEN EXTRACT(MONTH FROM ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) BETWEEN 4 AND 6 THEN 'Q2'
|
|
WHEN EXTRACT(MONTH FROM ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) BETWEEN 7 AND 9 THEN 'Q3'
|
|
ELSE 'Q4'
|
|
END AS TRIMESTRE,
|
|
CASE
|
|
WHEN EXTRACT(MONTH FROM ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) BETWEEN 1 AND 6 THEN '1º Sem'
|
|
ELSE '2º Sem'
|
|
END AS SEMESTRE
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12;
|
|
|
|
|
|
|
|
-------------------------
|
|
Valores_Categ_Fatu
|
|
-------------------------
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL+10)) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
PARAMETROS AS (
|
|
SELECT
|
|
MAX(CASE WHEN NOME = 'CON_FREQUENCIACLIENTE'
|
|
THEN VALOR END) AS CON_FREQUENCIACLIENTE,
|
|
MAX(CASE WHEN NOME = 'CON_FATURAMENTOCATCLIENTE'
|
|
THEN VALOR END) AS CON_FATURAMENTOCATCLIENTE
|
|
FROM PCPARAMFILIAL
|
|
),
|
|
FATURAMENTO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
SUM(NF.VLATEND) AS FATURAMENTO_BRUTO,
|
|
SUM(NF.VLCUSTOFIN) AS CUSTO_BRUTO
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
DEVOLUCAO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
SUM(DV.VLDEVOLUCAO) AS DEVOLUCAO
|
|
FROM VIEW_DEVOL_RESUMO_FATURAMENTO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTENT BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE DV.DTCANCEL IS NULL
|
|
AND DV.CONDVENDA IN (1,7)
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI
|
|
),
|
|
FREQUENCIA AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
COUNT(DISTINCT NF.NUMTRANSVENDA) AS FREQUENCIA
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
BASE_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
F.CODCLI,
|
|
NVL(F.FATURAMENTO_BRUTO,0) AS FATURAMENTO_BRUTO,
|
|
NVL(D.DEVOLUCAO,0) AS DEVOLUCAO,
|
|
NVL(FR.FREQUENCIA,0) AS FREQUENCIA,
|
|
NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0) AS FATURAMENTO_LIQUIDO,
|
|
NVL(F.CUSTO_BRUTO,0) AS CUSTO_LIQUIDO
|
|
FROM PERIODOS P
|
|
JOIN FATURAMENTO F ON F.ID_PERIODO = P.ID_PERIODO
|
|
LEFT JOIN DEVOLUCAO D
|
|
ON D.ID_PERIODO = F.ID_PERIODO
|
|
AND D.CODCLI = F.CODCLI
|
|
LEFT JOIN FREQUENCIA FR
|
|
ON FR.ID_PERIODO = F.ID_PERIODO
|
|
AND FR.CODCLI = F.CODCLI
|
|
),
|
|
CLIENTE_CATEGORIA AS (
|
|
SELECT
|
|
B.*,
|
|
CASE
|
|
WHEN FATURAMENTO_LIQUIDO >= CON_FATURAMENTOCATCLIENTE
|
|
AND FREQUENCIA >= CON_FREQUENCIACLIENTE
|
|
THEN 'DIAMANTE'
|
|
WHEN FATURAMENTO_LIQUIDO < CON_FATURAMENTOCATCLIENTE
|
|
AND FREQUENCIA >= CON_FREQUENCIACLIENTE
|
|
THEN 'PRATA'
|
|
WHEN FATURAMENTO_LIQUIDO >= CON_FATURAMENTOCATCLIENTE
|
|
AND FREQUENCIA < CON_FREQUENCIACLIENTE
|
|
THEN 'OURO'
|
|
ELSE 'BRONZE'
|
|
END AS CATEGORIA
|
|
FROM BASE_CLIENTE B
|
|
CROSS JOIN PARAMETROS P
|
|
)
|
|
SELECT
|
|
ID_PERIODO,
|
|
TO_CHAR(MES_REF,'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
CATEGORIA,
|
|
COUNT(DISTINCT CODCLI) AS QTD_CLIENTES,
|
|
SUM(FREQUENCIA) AS FREQUENCIA_TOTAL,
|
|
SUM(FATURAMENTO_BRUTO) AS FATURAMENTO_BRUTO,
|
|
SUM(DEVOLUCAO) AS DEVOLUCAO,
|
|
ROUND(SUM(FATURAMENTO_LIQUIDO),2) AS FATURAMENTO_LIQUIDO,
|
|
ROUND(
|
|
SUM(FATURAMENTO_BRUTO )
|
|
/
|
|
NULLIF(SUM(FREQUENCIA),0),
|
|
2) AS TICKET_MEDIO,
|
|
ROUND(
|
|
(SUM(FATURAMENTO_LIQUIDO) - SUM(CUSTO_LIQUIDO))
|
|
/
|
|
NULLIF(SUM(FATURAMENTO_LIQUIDO),0),
|
|
4) AS MARGEMa
|
|
FROM CLIENTE_CATEGORIA
|
|
GROUP BY
|
|
ID_PERIODO,
|
|
MES_REF,
|
|
CATEGORIA
|
|
ORDER BY
|
|
ID_PERIODO,
|
|
CATEGORIA
|
|
|
|
|
|
----------------------------------------------
|
|
Valores_Categ_Ticket
|
|
----------------------------------------------
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL+10)) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
PARAM_CATEGORIA_TICKET AS (
|
|
SELECT
|
|
500 AS LIM_TICKET_VALOR,
|
|
3 AS LIM_TICKET_FREQUENCIA
|
|
FROM DUAL
|
|
),
|
|
FATURAMENTO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
SUM(NF.VLATEND) AS FATURAMENTO_BRUTO,
|
|
SUM(NF.VLCUSTOFIN) AS CUSTO_BRUTO
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
DEVOLUCAO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
SUM(DV.VLDEVOLUCAO) AS DEVOLUCAO
|
|
FROM VIEW_DEVOL_RESUMO_FATURAMENTO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTENT BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE DV.DTCANCEL IS NULL
|
|
AND DV.CONDVENDA IN (1,7)
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI
|
|
),
|
|
FREQUENCIA AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
COUNT(DISTINCT NF.NUMTRANSVENDA) AS FREQUENCIA
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
BASE_CLIENTE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
F.CODCLI,
|
|
NVL(F.FATURAMENTO_BRUTO,0) AS FATURAMENTO_BRUTO,
|
|
NVL(D.DEVOLUCAO,0) AS DEVOLUCAO,
|
|
NVL(FR.FREQUENCIA,0) AS FREQUENCIA,
|
|
NVL(F.FATURAMENTO_BRUTO,0) - NVL(D.DEVOLUCAO,0) AS FATURAMENTO_LIQUIDO,
|
|
NVL(F.CUSTO_BRUTO,0) AS CUSTO_LIQUIDO
|
|
FROM PERIODOS P
|
|
JOIN FATURAMENTO F ON F.ID_PERIODO = P.ID_PERIODO
|
|
LEFT JOIN DEVOLUCAO D
|
|
ON D.ID_PERIODO = F.ID_PERIODO
|
|
AND D.CODCLI = F.CODCLI
|
|
LEFT JOIN FREQUENCIA FR
|
|
ON FR.ID_PERIODO = F.ID_PERIODO
|
|
AND FR.CODCLI = F.CODCLI
|
|
),
|
|
CLIENTE_TICKET AS (
|
|
SELECT
|
|
B.*,
|
|
ROUND(
|
|
B.FATURAMENTO_LIQUIDO / NULLIF(B.FREQUENCIA,0),
|
|
2) AS TICKET_MEDIO_CLI,
|
|
CASE
|
|
WHEN ROUND(B.FATURAMENTO_LIQUIDO / NULLIF(B.FREQUENCIA,0),2) >= PT.LIM_TICKET_VALOR
|
|
AND B.FREQUENCIA >= PT.LIM_TICKET_FREQUENCIA
|
|
THEN 'DIAMANTE'
|
|
WHEN ROUND(B.FATURAMENTO_LIQUIDO / NULLIF(B.FREQUENCIA,0),2) < PT.LIM_TICKET_VALOR
|
|
AND B.FREQUENCIA >= PT.LIM_TICKET_FREQUENCIA
|
|
THEN 'PRATA'
|
|
WHEN ROUND(B.FATURAMENTO_LIQUIDO / NULLIF(B.FREQUENCIA,0),2) >= PT.LIM_TICKET_VALOR
|
|
AND B.FREQUENCIA < PT.LIM_TICKET_FREQUENCIA
|
|
THEN 'OURO'
|
|
ELSE 'BRONZE'
|
|
END AS CATEGORIA_TICKET
|
|
FROM BASE_CLIENTE B
|
|
CROSS JOIN PARAM_CATEGORIA_TICKET PT
|
|
)
|
|
SELECT
|
|
ID_PERIODO,
|
|
TO_CHAR(MES_REF,'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
CATEGORIA_TICKET,
|
|
COUNT(DISTINCT CODCLI) AS QTD_CLIENTES,
|
|
SUM(FREQUENCIA) AS FREQUENCIA_TOTAL,
|
|
ROUND(SUM(FATURAMENTO_BRUTO),2) AS FATURAMENTO_BRUTO,
|
|
ROUND(SUM(DEVOLUCAO),2) AS DEVOLUCAO,
|
|
ROUND(SUM(FATURAMENTO_LIQUIDO),2) AS FATURAMENTO_LIQUIDO,
|
|
ROUND(
|
|
SUM(FATURAMENTO_BRUTO)
|
|
/
|
|
NULLIF(SUM(FREQUENCIA),0),
|
|
2) AS TICKET_MEDIO,
|
|
ROUND(
|
|
(SUM(FATURAMENTO_LIQUIDO) - SUM(CUSTO_LIQUIDO))
|
|
/
|
|
NULLIF(SUM(FATURAMENTO_LIQUIDO),0),
|
|
4) AS MARGEM
|
|
FROM CLIENTE_TICKET
|
|
GROUP BY
|
|
ID_PERIODO,
|
|
MES_REF,
|
|
CATEGORIA_TICKET
|
|
ORDER BY
|
|
ID_PERIODO,
|
|
CATEGORIA_TICKET;
|
|
|
|
|
|
--------------------------
|
|
Valores_Periodo
|
|
--------------------------
|
|
|
|
WITH PERIODOS AS (
|
|
SELECT
|
|
LEVEL AS ID_PERIODO,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1)) AS MES_REF,
|
|
ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL+10)) AS DATA_INICIO,
|
|
LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE,'MM'), -(LEVEL-1))) AS DATA_FIM
|
|
FROM DUAL
|
|
CONNECT BY LEVEL <= 12
|
|
),
|
|
FATURAMENTO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
SUM(NF.VLATEND) AS FATURAMENTO_BRUTO,
|
|
SUM(NF.VLCUSTOFIN) AS CUSTO_BRUTO
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
DEVOLUCAO AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
DV.CODCLI,
|
|
SUM(DV.VLDEVOLUCAO) AS DEVOLUCAO
|
|
FROM VIEW_DEVOL_RESUMO_FATURAMENTO DV
|
|
JOIN PERIODOS P
|
|
ON DV.DTENT BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE DV.DTCANCEL IS NULL
|
|
AND DV.CONDVENDA IN (1,7)
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
DV.CODCLI
|
|
),
|
|
FREQUENCIA AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
NF.CODCLI,
|
|
COUNT(DISTINCT NF.NUMTRANSVENDA) AS FREQUENCIA
|
|
FROM VIEW_VENDAS_RESUMO_FATURAMENTO NF
|
|
JOIN PERIODOS P
|
|
ON NF.DTSAIDA BETWEEN P.DATA_INICIO AND P.DATA_FIM
|
|
WHERE NF.CONDVENDA IN (1,7)
|
|
AND NF.DTCANCEL IS NULL
|
|
GROUP BY
|
|
P.ID_PERIODO,
|
|
NF.CODCLI
|
|
),
|
|
BASE AS (
|
|
SELECT
|
|
P.ID_PERIODO,
|
|
P.MES_REF,
|
|
F.CODCLI,
|
|
NVL(F.FATURAMENTO_BRUTO,0) AS FATURAMENTO_BRUTO,
|
|
NVL(F.CUSTO_BRUTO,0) AS CUSTO_BRUTO,
|
|
NVL(D.DEVOLUCAO,0) AS DEVOLUCAO,
|
|
NVL(FR.FREQUENCIA,0) AS FREQUENCIA
|
|
FROM PERIODOS P
|
|
JOIN FATURAMENTO F ON F.ID_PERIODO = P.ID_PERIODO
|
|
LEFT JOIN DEVOLUCAO D
|
|
ON D.ID_PERIODO = F.ID_PERIODO
|
|
AND D.CODCLI = F.CODCLI
|
|
LEFT JOIN FREQUENCIA FR
|
|
ON FR.ID_PERIODO = F.ID_PERIODO
|
|
AND FR.CODCLI = F.CODCLI
|
|
)
|
|
SELECT
|
|
ID_PERIODO,
|
|
TO_CHAR(MES_REF,'MM/YYYY') AS PERIODO_REFERENCIA,
|
|
COUNT(DISTINCT CODCLI) AS QTD_CLIENTES,
|
|
SUM(FREQUENCIA) AS FREQUENCIA_TOTAL,
|
|
ROUND(SUM(FATURAMENTO_BRUTO),2) AS FATURAMENTO_BRUTO,
|
|
ROUND(SUM(DEVOLUCAO),2) AS DEVOLUCAO,
|
|
ROUND(SUM(FATURAMENTO_BRUTO - DEVOLUCAO),2) AS FATURAMENTO_LIQUIDO,
|
|
ROUND(SUM(CUSTO_BRUTO),2) AS CUSTO_BRUTO,
|
|
ROUND(
|
|
(SUM(FATURAMENTO_BRUTO - DEVOLUCAO) - SUM(CUSTO_BRUTO))
|
|
/
|
|
NULLIF(SUM(FATURAMENTO_BRUTO - DEVOLUCAO),0),
|
|
4) AS MARGEM,
|
|
ROUND(
|
|
SUM(FATURAMENTO_BRUTO)
|
|
/
|
|
NULLIF(SUM(FREQUENCIA), 0),
|
|
2) AS TICKET_MEDIO
|
|
FROM BASE
|
|
GROUP BY
|
|
ID_PERIODO,
|
|
MES_REF
|
|
ORDER BY
|
|
ID_PERIODO |