Académique Documents
Professionnel Documents
Culture Documents
--##############################################################################
################################################################################
##
-- BUCLE DE HOJA
--##############################################################################
################################################################################
##
n_hoja := 3;
--INSERTANDO ENCABEZADO DE HOJA
cadena := 'INSERT INTO machine_dealer_3 values (null,'||n_hoja||',0,0,0,
0,0,0,''ACTIVACIN''';
ini_head := 10;
fin_head := (SELECT max(ordinal_position) FROM information_schema.column
s WHERE table_name = 'machine_dealer_3');
FOR n IN ini_head .. fin_head LOOP
cadena := cadena || (SELECT ','''||column_name||'''' as columna
FROM information_schema.columns
WHERE table_name = 'machine_dealer_3' AND ordinal_positi
on = n
ORDER BY ordinal_position);
END LOOP;
cadena := cadena || ');';
EXECUTE cadena;
--##############################################################################
################################################################################
##
drop sequence if exists machine_consulta_dealer3_zona_id_seq;
create sequence machine_consulta_dealer3_zona_id_seq;
FOR var_zona IN ( SELECT DISTINCT zona from machine_consulta_dealer3 ORDER BY 1
) LOOP
n_zona := nextval('machine_consulta_dealer3_zona_id_seq');
INSERT INTO machine_dealer_3 VALUES(null,n_hoja,n_zona,0,0,0,0,1,var_zon
a );
drop sequence if exists machine_consulta_dealer3_dealer_id_seq;
create sequence machine_consulta_dealer3_dealer_id_seq;
FOR var_deal IN ( SELECT DISTINCT dealer_ok from machine_consulta_dealer
3 WHERE zona = var_zona ORDER BY 1 ) LOOP
n_deal := nextval('machine_consulta_dealer3_dealer_id_seq');
INSERT INTO machine_dealer_3 VALUES(null,n_hoja,n_zona,n_deal,0,
0,0,2,var_deal);
drop sequence if exists machine_consulta_dealer3_departamento_id
_seq;
create sequence machine_consulta_dealer3_departamento_id_seq;
FOR var_depa IN ( SELECT DISTINCT departamento from machine_cons
ulta_dealer3 WHERE zona = var_zona AND dealer_ok = var_deal ORDER BY 1 ) LOOP
n_depa := nextval('machine_consulta_dealer3_departamento
_id_seq');
INSERT INTO machine_dealer_3 VALUES(null,n_hoja,n_zona,n
_deal,n_depa,0,0,3,var_depa);
drop sequence if exists machine_consulta_dealer3_provinc
ia_id_seq;
create sequence machine_consulta_dealer3_provincia_id_se
q;
FOR var_prov IN ( SELECT DISTINCT provincia from machine
_consulta_dealer3 WHERE zona = var_zona AND dealer_ok = var_deal AND departament
o = var_depa ORDER BY 1 ) LOOP
n_prov := nextval('machine_consulta_dealer3_prov
incia_id_seq');
INSERT INTO machine_dealer_3 VALUES(null,n_hoja,
n_zona,n_deal,n_depa,n_prov,0,4,var_prov);
IF ( var_zona IN ('LIMA 1','LIMA 2') ) THEN
--TABLA TEMPORAL CON DATOS DEL DEALER
DROP TABLE IF EXISTS machine_dealer_temp
;
CREATE TABLE machine_dealer_temp as (
SELECT f_base,f_act,count(custom
er_id) FROM machine_bd
WHERE churn30 is false A
ND f_act >= fecha_inicio
AND customer_id in (SE
LECT customer_id FROM machine_cac WHERE migro = 'NO')
AND customer_id in (SE
LECT customer_id FROM machine_variables_alan
WHERE
zona_peru = va
r_zona AND
dealer_ok = va
r_deal AND
departamento_i
nicial = var_depa AND
provincia_inic
ial = var_prov
)
GROUP BY f_act,f
_base ORDER BY f_base,f_act
);
ELSE
--TABLA TEMPORAL CON DATOS DEL DEALER
DROP TABLE IF EXISTS machine_dealer_temp
;
CREATE TABLE machine_dealer_temp as (
SELECT f_base,f_act,count(custom
er_id) FROM machine_bd
WHERE churn30 is false A
ND f_act >= fecha_inicio
AND customer_id in (SE
LECT customer_id FROM machine_cac WHERE migro = 'NO')
AND customer_id in (SE
LECT customer_id FROM machine_variables_alan
WHERE
zona_comercial
_inicial = var_zona AND
dealer_ok = va
r_deal AND
departamento_i
nicial = var_depa AND
provincia_inic
ial = var_prov
)
GROUP BY f_act,f
_base ORDER BY f_base,f_act
);
END IF;
--INSERTANDO PARA QUE TODOS TENGAN MISMA CANTIDA
D DE FILAS - COLUMNAS
INSERT INTO machine_dealer_temp (SELECT f_base,f
_act FROM machine_dealer_total WHERE f_base NOT IN (SELECT f_base FROM machine_d
ealer_temp) );
INSERT INTO machine_dealer_temp (SELECT f_base,f
_act FROM machine_dealer_total WHERE f_act NOT IN (SELECT f_act FROM machine_dea
ler_temp) );
DROP SEQUENCE IF EXISTS seq_machine;
CREATE SEQUENCE seq_machine start 1;
--TABLA DINAMICA POR DEALER
INSERT INTO machine_dealer_3(
SELECT null, n_hoja, n_zona, n_deal, n_depa
, n_prov, nextval('seq_machine')::int dato_id, 5, *
FROM crosstab(
'SELECT descripcion(f_act),descripcion
(f_base),count n FROM machine_dealer_temp ORDER BY f_act,f_base',
'SELECT descripcion(f_base) FROM mach
ine_dealer_temp GROUP BY f_base ORDER BY f_base'
) AS (
f_act varchar,
/*
"Ene-13" varchar,"Feb-13" varcha
r,"Mar-13" varchar,"Abr-13" varchar,"May-13" varchar,"Jun-13" varchar,"Jul-13" v
archar,
"Ago-13" varchar,"Sep-13
" varchar,"Oct-13" varchar,"Nov-13" varchar,"Dic-13" varchar,
"Ene-14" varchar,"Feb-14" varcha
r,"Mar-14" varchar,"Abr-14" varchar,"May-14" varchar,"Jun-14" varchar,"Jul-14" v
archar,
"Ago-14" varchar,"Sep-14
" varchar,"Oct-14" varchar,"Nov-14" varchar,"Dic-14" varchar,
*/
"Ene-15" varchar,"Feb-15" varcha
r,"Mar-15" varchar,"Abr-15" varchar,"May-15" varchar,"Jun-15" varchar,"Jul-15" v
archar,
"Ago-15" varchar,"Sep-15
" varchar,"Oct-15" varchar,"Nov-15" varchar,"Dic-15" varchar,
"Ene-16" varchar,"Feb-16" varcha
r,"Mar-16" varchar,"Abr-16" varchar,"May-16" varchar,"Jun-16" varchar,"Jul-16" v
archar,
"Ago-16" varchar,"Sep-16
" varchar
)
);
END LOOP;
END LOOP;
END LOOP;
END LOOP;
--##############################################################################
################################################################################
##
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION machine_dealer_depa_prov() OWNER TO postgres;