Vous êtes sur la page 1sur 5

-- Function: machine_dealer_depa_prov()

-- DROP FUNCTION machine_dealer_depa_prov();


CREATE OR REPLACE FUNCTION machine_dealer_depa_prov()
RETURNS void AS
$BODY$
DECLARE
var_zona varchar;
var_deal varchar;
var_depa varchar;
var_prov varchar;
n_hoja int;
n_zona int;
n_deal int;
n_depa int;
n_prov int;
ini_head int;
fin_head int;
cadena text;
fecha_inicio date;
BEGIN
fecha_inicio := '2015-01-01';
-- select * from machine_variables_alan
-- TABLA CONTENIENDO LOS CRITERIOS
DROP TABLE if exists machine_consulta_dealer3;
CREATE TABLE machine_consulta_dealer3 as (
SELECT zona_comercial_inicial as zona,
dealer_ok,
departamento_inicial as departamento,
provincia_inicial as provincia
FROM machine_variables_alan
WHERE cod_dealer IN ('D','M','R','I','5','Z','X','A') and dealer not IN
(select dealer from directv_callouts )
AND customer_id IN (
SELECT distinct customer_id FROM machine_bd --1::int dealer_id,
WHERE churn30 is false AND f_act >= fecha_inicio --'2013-01-01'
AND customer_id in (SELECT customer_id FROM machine_cac
WHERE migro = 'NO')
)
GROUP BY 1,2,3,4
ORDER BY 1,2,3,4
);

--CREACION DE TABLA CON RESTRICCION ACTIVACION-BASE PARA EVITAR ERRORES EN LA CO


RRIDA
DROP TABLE IF EXISTS machine_dealer_total;
CREATE TABLE machine_dealer_total as (
SELECT f_base,f_act,0::int count
FROM machine_bd
WHERE churn30 is false AND f_act >= fecha_inicio --'2013-01-01'
GROUP BY f_act,f_base ORDER BY f_base,f_act
);
--CREACION DE ESTRUCTURA DE LA TABLA PRINCIPAL
DROP TABLE IF EXISTS machine_dealer_3;
CREATE TABLE machine_dealer_3 as (
SELECT null::int as gid,null::int as tabla_id, null::int as zona_id, nul
l::int as dealer_id, null::int as depa_id, null::int as prov_id, null::int dato_
id, null::int as color_id,*
FROM crosstab(
'SELECT descripcion(f_act),descripcion(f_base),count n FROM machine_d
ealer_total ORDER BY f_act,f_base',
'SELECT descripcion(f_base) FROM machine_dealer_total GROUP BY f_base
ORDER BY f_base'
) AS (
f_act varchar,
-- "Ene-13" varchar,"Feb-13" varchar,"Mar-13" varchar,"Abr-13" v
archar,"May-13" varchar,"Jun-13" varchar,"Jul-13" varchar,
-- "Ago-13" varchar,"Sep-13" varchar,"Oct-13" varchar,"Nov-
13" varchar,"Dic-13" varchar,
-- "Ene-14" varchar,"Feb-14" varchar,"Mar-14" varchar,"Abr-14" varc
har,"May-14" varchar,"Jun-14" varchar,"Jul-14" varchar,
-- "Ago-14" varchar,"Sep-14" varchar,"Oct-14" varchar,"Nov-
14" varchar,"Dic-14" varchar,
"Ene-15" varchar,"Feb-15" varchar,"Mar-15" varchar,"Abr-15" varc
har,"May-15" varchar,"Jun-15" varchar,"Jul-15" varchar,
"Ago-15" varchar,"Sep-15" varchar,"Oct-15" varchar,"Nov-
15" varchar,"Dic-15" varchar,
"Ene-16" varchar,"Feb-16" varchar,"Mar-16" varchar,"Abr-16" varc
har,"May-16" varchar,"Jun-16" varchar,"Jul-16" varchar,
"Ago-16" varchar,"Sep-16" varchar
)
LIMIT 0
);

--##############################################################################
################################################################################
##
-- 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;

Vous aimerez peut-être aussi