From 8a9c439829f44a17d5eaaea4bb423bac203fe1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sarah=20Magalh=C3=A3es?= Date: Wed, 3 Jun 2026 09:54:17 -0300 Subject: [PATCH] Ajuste query flash categoria --- src/flash/flash.module.ts | 84 ++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 40 deletions(-) diff --git a/src/flash/flash.module.ts b/src/flash/flash.module.ts index c261573..8792303 100644 --- a/src/flash/flash.module.ts +++ b/src/flash/flash.module.ts @@ -1058,14 +1058,14 @@ 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 + 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 + SELECT dt_ref, TRUNC(dt_ref, 'MM') AS dt_inicio_mes, ADD_MONTHS(TRUNC(dt_ref, 'MM'), -1) AS dt_inicio_mes_ant, @@ -1074,10 +1074,10 @@ where 1 = 0`, ADD_MONTHS(dt_ref, -12) AS dt_fim_ano_ant, id_nodo_pai, cod_empresa - FROM Parametros_Base + FROM Parametros_Base ), filhos AS ( - SELECT + 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 @@ -1088,7 +1088,7 @@ where 1 = 0`, AND (p.cod_empresa IS NULL OR n.cod_empresa = p.cod_empresa) ), Vendas_Metas AS ( - SELECT + SELECT f.id_nodo, f.codigo, f.nome, f.tipo_nodo, f.nivel, f.cod_empresa, f.ordem_exibicao, r.data_referencia AS data, @@ -1103,49 +1103,53 @@ where 1 = 0`, ), Agrupado AS ( SELECT - v.id_nodo, - MAX(v.codigo) AS 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, - + -- Quando NÃO tem filtro de empresa: agrupa por CODIGO (consolida várias empresas) + -- Quando TEM filtro de empresa: agrupa por ID_NODO (cada empresa separada) + v.codigo AS codigo, + MAX(v.nome) AS nome, + MAX(v.tipo_nodo) AS tipo_nodo, + MAX(v.nivel) AS nivel, + CASE WHEN p.cod_empresa IS NULL + THEN NULL + ELSE MAX(v.cod_empresa) + END AS cod_empresa, + MAX(v.ordem_exibicao) AS ordem_exibicao, + GROUPING(v.codigo) 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, - + SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes AND p.dt_ref THEN v.meta ELSE 0 END) AS m_mes, SUM(CASE WHEN v.data BETWEEN p.dt_inicio_mes_ant AND p.dt_fim_mes_ant THEN v.meta ELSE 0 END) AS m_mes_ant, SUM(CASE WHEN v.data BETWEEN p.dt_inicio_ano_ant AND p.dt_fim_ano_ant THEN v.meta ELSE 0 END) AS m_ano_ant FROM Vendas_Metas v CROSS JOIN Parametros p - GROUP BY GROUPING SETS ((v.id_nodo), ()) + GROUP BY GROUPING SETS ((v.codigo, p.cod_empresa), ()) ) SELECT - nome AS nomeempresaapp, - tipo_nodo AS canalapp, - cod_empresa AS cod_empresa, - is_total, - - m_mes AS meta_mes, - v_mes AS mes_atual, - (v_mes - m_mes) AS dif_mes_atual, - CASE - WHEN m_mes = 0 THEN 0 - ELSE ROUND(((v_mes / m_mes) * 100) - 100, 2) - END AS variacao_atual, + nome AS nomeempresaapp, + tipo_nodo AS canalapp, + cod_empresa AS cod_empresa, + is_total, - m_mes_ant AS meta_mes_anterior, - 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, + m_mes AS meta_mes, + v_mes AS mes_atual, + (v_mes - m_mes) AS dif_mes_atual, + CASE + WHEN m_mes = 0 THEN 0 + ELSE ROUND(((v_mes / m_mes) * 100) - 100, 2) + END AS variacao_atual, - m_ano_ant AS meta_ano_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 + m_mes_ant AS meta_mes_anterior, + 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, + + m_ano_ant AS meta_ano_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, nomeempresaapp `