This commit is contained in:
+81
-74
@@ -1058,81 +1058,88 @@ where 1 = 0`,
|
||||
return {
|
||||
sql: /*sql*/`
|
||||
WITH Parametros_Base AS (
|
||||
SELECT
|
||||
TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref,
|
||||
${args.codigo_categoria_pai} AS id_nodo_pai,
|
||||
${args.cod_empresa} AS cod_empresa
|
||||
FROM DUAL
|
||||
),
|
||||
Parametros AS (
|
||||
SELECT
|
||||
dt_ref,
|
||||
TRUNC(dt_ref, 'MM') AS dt_inicio_mes,
|
||||
ADD_MONTHS(TRUNC(dt_ref, 'MM'), -1) AS dt_inicio_mes_ant,
|
||||
ADD_MONTHS(dt_ref, -1) AS dt_fim_mes_ant,
|
||||
ADD_MONTHS(TRUNC(dt_ref, 'MM'), -12) AS dt_inicio_ano_ant,
|
||||
ADD_MONTHS(dt_ref, -12) AS dt_fim_ano_ant,
|
||||
id_nodo_pai,
|
||||
cod_empresa
|
||||
FROM Parametros_Base
|
||||
),
|
||||
filhos AS (
|
||||
SELECT
|
||||
n.id_nodo, n.codigo, n.nome, n.tipo_nodo, n.nivel,
|
||||
n.cod_empresa, n.ordem_exibicao
|
||||
FROM VERDEMAR.TB_FLASH_NODO n
|
||||
CROSS JOIN Parametros p
|
||||
WHERE n.ativo = 'S'
|
||||
AND ( (p.id_nodo_pai IS NULL AND n.id_nodo_pai IS NULL AND n.tipo_nodo = 'EMPRESA')
|
||||
OR (p.id_nodo_pai IS NOT NULL AND n.id_nodo_pai = p.id_nodo_pai) )
|
||||
AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa)
|
||||
),
|
||||
Vendas AS (
|
||||
SELECT
|
||||
f.id_nodo, f.codigo, f.nome, f.tipo_nodo, f.nivel,
|
||||
f.cod_empresa, f.ordem_exibicao,
|
||||
r.data_referencia AS data,
|
||||
r.valor_venda AS venda
|
||||
FROM filhos f
|
||||
JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo
|
||||
CROSS JOIN Parametros p
|
||||
WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref
|
||||
OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant
|
||||
OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant)
|
||||
),
|
||||
Agrupado AS (
|
||||
SELECT
|
||||
TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref,
|
||||
${args.codigo_categoria_pai} AS id_nodo_pai,
|
||||
${args.cod_empresa} AS cod_empresa
|
||||
FROM DUAL
|
||||
),
|
||||
Parametros AS (
|
||||
SELECT
|
||||
dt_ref,
|
||||
TRUNC(dt_ref, 'MM') AS dt_inicio_mes,
|
||||
ADD_MONTHS(TRUNC(dt_ref, 'MM'), -1) AS dt_inicio_mes_ant,
|
||||
ADD_MONTHS(dt_ref, -1) AS dt_fim_mes_ant,
|
||||
ADD_MONTHS(TRUNC(dt_ref, 'MM'), -12) AS dt_inicio_ano_ant,
|
||||
ADD_MONTHS(dt_ref, -12) AS dt_fim_ano_ant,
|
||||
id_nodo_pai,
|
||||
cod_empresa
|
||||
FROM Parametros_Base
|
||||
),
|
||||
filhos AS (
|
||||
SELECT
|
||||
n.id_nodo, n.codigo, n.nome, n.tipo_nodo, n.nivel,
|
||||
n.cod_empresa, n.ordem_exibicao
|
||||
FROM VERDEMAR.TB_FLASH_NODO n
|
||||
CROSS JOIN Parametros p
|
||||
WHERE n.ativo = 'S'
|
||||
AND ( (p.id_nodo_pai IS NULL AND n.id_nodo_pai IS NULL AND n.tipo_nodo = 'EMPRESA')
|
||||
OR (p.id_nodo_pai IS NOT NULL AND n.id_nodo_pai = p.id_nodo_pai) )
|
||||
AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa)
|
||||
),
|
||||
Vendas AS (
|
||||
SELECT
|
||||
f.id_nodo, f.codigo, f.nome, f.tipo_nodo, f.nivel,
|
||||
f.cod_empresa, f.ordem_exibicao,
|
||||
r.data_referencia AS data,
|
||||
r.valor_venda AS venda
|
||||
FROM filhos f
|
||||
JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo
|
||||
CROSS JOIN Parametros p
|
||||
WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref
|
||||
OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant
|
||||
OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant)
|
||||
),
|
||||
Agrupado AS (
|
||||
SELECT
|
||||
v.id_nodo,
|
||||
v.codigo,
|
||||
MAX(v.nome) AS nome,
|
||||
MAX(v.tipo_nodo) AS tipo_nodo,
|
||||
MAX(v.nivel) AS nivel,
|
||||
MAX(v.cod_empresa) AS cod_empresa,
|
||||
MAX(v.ordem_exibicao) AS ordem_exibicao,
|
||||
GROUPING(v.id_nodo) AS is_total,
|
||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN v.venda ELSE 0 END) AS v_mes,
|
||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.venda ELSE 0 END) AS v_mes_ant,
|
||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.venda ELSE 0 END) AS v_ano_ant
|
||||
FROM Vendas v
|
||||
CROSS JOIN Parametros p
|
||||
GROUP BY GROUPING SETS ((v.id_nodo, v.codigo), ())
|
||||
)
|
||||
SELECT
|
||||
v.id_nodo,
|
||||
v.codigo,
|
||||
MAX(v.nome) AS nome,
|
||||
MAX(v.tipo_nodo) AS tipo_nodo,
|
||||
MAX(v.nivel) AS nivel,
|
||||
MAX(v.cod_empresa) AS cod_empresa,
|
||||
MAX(v.ordem_exibicao) AS ordem_exibicao,
|
||||
GROUPING(v.id_nodo) AS is_total,
|
||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN v.venda ELSE 0 END) AS v_mes,
|
||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.venda ELSE 0 END) AS v_mes_ant,
|
||||
SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.venda ELSE 0 END) AS v_ano_ant
|
||||
FROM Vendas v
|
||||
CROSS JOIN Parametros p
|
||||
GROUP BY GROUPING SETS ((v.id_nodo, v.codigo), ())
|
||||
)
|
||||
SELECT
|
||||
codigo AS cod_nodo,
|
||||
nome AS nome_nodo,
|
||||
tipo_nodo,
|
||||
nivel,
|
||||
cod_empresa,
|
||||
is_total,
|
||||
v_mes AS mes_atual,
|
||||
v_mes_ant AS mes_anterior,
|
||||
(v_mes - v_mes_ant) AS dif_mes_anterior,
|
||||
ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior,
|
||||
v_ano_ant AS ano_anterior,
|
||||
(v_mes - v_ano_ant) AS dif_ano_anterior,
|
||||
ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior
|
||||
FROM Agrupado
|
||||
ORDER BY is_total, ordem_exibicao NULLS LAST, nome_nodo
|
||||
nome AS categoriaapp,
|
||||
codigo AS cod_nodo,
|
||||
tipo_nodo,
|
||||
nivel,
|
||||
cod_empresa,
|
||||
is_total,
|
||||
|
||||
v_mes AS venda_dia,
|
||||
v_mes AS mes_atual,
|
||||
0 AS meta_mes,
|
||||
0 AS dif_mes_atual,
|
||||
0 AS variacao_atual,
|
||||
|
||||
v_mes_ant AS mes_anterior,
|
||||
(v_mes - v_mes_ant) AS dif_mes_anterior,
|
||||
ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior,
|
||||
|
||||
v_ano_ant AS ano_anterior,
|
||||
(v_mes - v_ano_ant) AS dif_ano_anterior,
|
||||
ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior
|
||||
FROM Agrupado
|
||||
ORDER BY is_total, ordem_exibicao NULLS LAST, categoriaapp
|
||||
`
|
||||
}
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user