Ajuste query flash categoria
davinTI/app-dono-modulos/pipeline/head This commit looks good

This commit is contained in:
Sarah Magalhães
2026-06-02 16:38:18 -03:00
parent 8753baa1ce
commit eeacc8dad3
+75 -70
View File
@@ -1057,77 +1057,82 @@ where 1 = 0`,
flash_categorias: (args) => { flash_categorias: (args) => {
return { return {
sql: /*sql*/` sql: /*sql*/`
WITH Parametros AS ( WITH Parametros_Base AS (
SELECT TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref, SELECT
TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM') AS dt_inicio_mes, TO_DATE(${args.data_venda}, 'YYYY-MM-DD') AS dt_ref,
ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -1) AS dt_inicio_mes_ant, ${args.codigo_categoria_pai} AS id_nodo_pai,
ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -1) AS dt_fim_mes_ant, ${args.cod_empresa} AS cod_empresa
ADD_MONTHS(TRUNC(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), 'MM'), -12) AS dt_inicio_ano_ant, FROM DUAL
ADD_MONTHS(TO_DATE(${args.data_venda}, 'YYYY-MM-DD'), -12) AS dt_fim_ano_ant, ),
${args.codigo_categoria_pai} AS id_nodo_pai, Parametros AS (
${args.cod_empresa} AS cod_empresa SELECT
FROM DUAL dt_ref,
), TRUNC(dt_ref, 'MM') AS dt_inicio_mes,
filhos AS ( ADD_MONTHS(TRUNC(dt_ref, 'MM'), -1) AS dt_inicio_mes_ant,
SELECT n.id_nodo, n.codigo, n.nome, n.tipo_nodo, n.nivel, ADD_MONTHS(dt_ref, -1) AS dt_fim_mes_ant,
n.cod_empresa, n.ordem_exibicao ADD_MONTHS(TRUNC(dt_ref, 'MM'), -12) AS dt_inicio_ano_ant,
FROM VERDEMAR.TB_FLASH_NODO n ADD_MONTHS(dt_ref, -12) AS dt_fim_ano_ant,
CROSS JOIN Parametros p id_nodo_pai,
WHERE n.ativo = 'S' cod_empresa
AND ( (p.id_nodo_pai IS NULL AND n.id_nodo_pai IS NULL AND n.tipo_nodo = 'EMPRESA') FROM Parametros_Base
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) filhos AS (
), SELECT
Vendas AS ( n.id_nodo, n.codigo, n.nome, n.tipo_nodo, n.nivel,
SELECT f.id_nodo, n.cod_empresa, n.ordem_exibicao
f.codigo, FROM VERDEMAR.TB_FLASH_NODO n
f.nome, CROSS JOIN Parametros p
f.tipo_nodo, WHERE n.ativo = 'S'
f.nivel, AND ( (p.id_nodo_pai IS NULL AND n.id_nodo_pai IS NULL AND n.tipo_nodo = 'EMPRESA')
f.cod_empresa, OR (p.id_nodo_pai IS NOT NULL AND n.id_nodo_pai = p.id_nodo_pai) )
f.ordem_exibicao, AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa)
r.data_referencia AS data, ),
r.valor_venda AS venda Vendas AS (
FROM filhos f SELECT
JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo f.id_nodo, f.codigo, f.nome, f.tipo_nodo, f.nivel,
CROSS JOIN Parametros p f.cod_empresa, f.ordem_exibicao,
WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref r.data_referencia AS data,
OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant r.valor_venda AS venda
OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant) FROM filhos f
), JOIN VERDEMAR.TB_FLASH_NODO_RESUMO_VENDA r ON r.id_nodo = f.id_nodo
Agrupado AS ( CROSS JOIN Parametros p
SELECT WHERE ( r.data_referencia BETWEEN p.dt_inicio_mes AND p.dt_ref
v.id_nodo, OR r.data_referencia BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant
v.codigo, OR r.data_referencia BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant)
MAX(v.nome) AS nome, ),
MAX(v.tipo_nodo) AS tipo_nodo, Agrupado AS (
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 SELECT
codigo AS cod_nodo, v.id_nodo,
nome AS nome_nodo, v.codigo,
tipo_nodo, MAX(v.nome) AS nome,
nivel, MAX(v.tipo_nodo) AS tipo_nodo,
cod_empresa, MAX(v.nivel) AS nivel,
is_total, MAX(v.cod_empresa) AS cod_empresa,
v_mes AS mes_atual, MAX(v.ordem_exibicao) AS ordem_exibicao,
v_mes_ant AS mes_anterior, GROUPING(v.id_nodo) AS is_total,
(v_mes - v_mes_ant) AS dif_mes_anterior, SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN v.venda ELSE 0 END) AS v_mes,
ROUND(NVL((v_mes / NULLIF(v_mes_ant, 0)) * 100 - 100, 0), 2) AS variacao_mes_anterior, 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,
v_ano_ant AS ano_anterior, 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
(v_mes - v_ano_ant) AS dif_ano_anterior, FROM Vendas v
ROUND(NVL((v_mes / NULLIF(v_ano_ant, 0)) * 100 - 100, 0), 2) AS variacao_ano_anterior CROSS JOIN Parametros p
FROM Agrupado GROUP BY GROUPING SETS ((v.id_nodo, v.codigo), ())
ORDER BY is_total, ordem_exibicao NULLS LAST, nome_nodo )
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
` `
} }
}, },