Advertisement
aadddrr

BACKUP F AGREGATE PERCENTAGE

Mar 27th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_agregate_percentage(character varying, character varying, character varying, integer, integer, integer)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pSessionId      ALIAS FOR $1;
  6.     pIdData         ALIAS FOR $2;
  7.     pDelimeter      ALIAS FOR $3;
  8.     pChild          ALIAS FOR $4;
  9.     pParent         ALIAS FOR $5;  
  10.     pDecimalPoint       ALIAS FOR $6;
  11.  
  12. BEGIN
  13.     DELETE FROM tt_dashboard_data WHERE session_id = pSessionId AND id_data = pIdData;
  14.     DELETE FROM tt_dashboard_data_precision WHERE session_id = pSessionId AND id_data = pIdData;
  15.     DELETE FROM tt_dashboard_measure_precision WHERE session_id = pSessionId AND id_data = pIdData;
  16.  
  17.     IF pChild = 1 THEN
  18.       UPDATE tt_input_data SET child_group = data_group_1 WHERE session_id = pSessionId AND id_data = pIdData;
  19.     ELSE
  20.         IF pChild = 2 THEN
  21.           UPDATE tt_input_data SET child_group = data_group_1||pDelimeter||data_group_2 WHERE session_id = pSessionId AND id_data = pIdData;
  22.         ELSE
  23.             IF pChild = 3 THEN
  24.               UPDATE tt_input_data SET child_group = data_group_1||pDelimeter||data_group_2||pDelimeter||data_group_3 WHERE session_id = pSessionId AND id_data = pIdData;
  25.             ELSE
  26.                 IF pChild = 4 THEN
  27.                   UPDATE tt_input_data SET child_group = data_group_1||pDelimeter||data_group_2||pDelimeter||data_group_3||pDelimeter||data_group_4 WHERE session_id = pSessionId AND id_data = pIdData;
  28.                 ELSE
  29.                   UPDATE tt_input_data SET child_group = data_group_1||pDelimeter||data_group_2||pDelimeter||data_group_3||pDelimeter||data_group_4||pDelimeter||data_group_5 WHERE session_id = pSessionId AND id_data = pIdData;
  30.                 END IF;
  31.             END IF;
  32.         END IF;
  33.     END IF;
  34.    
  35.     IF pParent = 1 THEN
  36.       UPDATE tt_input_data SET parent_group = data_group_1 WHERE session_id = pSessionId AND id_data = pIdData;
  37.     ELSE
  38.         IF pParent = 2 THEN
  39.           UPDATE tt_input_data SET parent_group = data_group_1||pDelimeter||data_group_2 WHERE session_id = pSessionId AND id_data = pIdData;
  40.         ELSE
  41.             IF pParent = 3 THEN
  42.               UPDATE tt_input_data SET parent_group = data_group_1||pDelimeter||data_group_2||pDelimeter||data_group_3 WHERE session_id = pSessionId AND id_data = pIdData;
  43.             ELSE
  44.                 IF pParent = 4 THEN
  45.                   UPDATE tt_input_data SET parent_group = data_group_1||pDelimeter||data_group_2||pDelimeter||data_group_3||pDelimeter||data_group_4 WHERE session_id = pSessionId AND id_data = pIdData;
  46.                 ELSE
  47.                   UPDATE tt_input_data SET parent_group = data_group_1||pDelimeter||data_group_2||pDelimeter||data_group_3||pDelimeter||data_group_4||pDelimeter||data_group_5 WHERE session_id = pSessionId AND id_data = pIdData;
  48.                 END IF;
  49.             END IF;
  50.         END IF;
  51.     END IF;
  52.  
  53.     INSERT INTO tt_group_data
  54.     (session_id,id_data,data_group_1,data_group_2,data_group_3,data_group_4,data_group_5,
  55.     child_group,parent_group)
  56.     SELECT session_id, id_data, data_group_1, data_group_2,
  57.         data_group_3, data_group_4, data_group_5,
  58.         child_group, parent_group
  59.     FROM tt_input_data
  60.     WHERE session_id = pSessionId AND
  61.         id_data = pIdData
  62.     GROUP BY session_id, id_data, data_group_1, data_group_2, data_group_3, data_group_4, data_group_5,
  63.         child_group,parent_group;
  64.    
  65.         INSERT INTO tt_dashboard_data
  66.         (session_id,id_data,child_group,parent_group,
  67.          sum_measure, min_measure,max_measure,avg_measure,
  68.          sub_total, total, percentage,
  69.          total_measure, percentage_measure)
  70.         SELECT DISTINCT session_id, id_data, child_group, parent_group,
  71.                SUM(data_measure) OVER (PARTITION BY child_group),
  72.                MIN(data_measure) OVER (PARTITION BY child_group),
  73.                MAX(data_measure) OVER (PARTITION BY child_group),
  74.                AVG(data_measure) OVER (PARTITION BY child_group),
  75.                SUM(data_count) OVER (PARTITION BY child_group),
  76.                SUM(data_count) OVER (PARTITION BY parent_group),
  77.                100,
  78.                SUM(data_measure) OVER (PARTITION BY parent_group),
  79.                100
  80.         FROM tt_input_data
  81.         WHERE session_id = pSessionId AND id_data = pIdData
  82.         ORDER BY child_group;
  83.  
  84.     UPDATE tt_dashboard_data SET percentage = ROUND(100*sub_total/total,pDecimalPoint)::numeric WHERE session_id = pSessionId AND id_data = pIdData;        
  85.     UPDATE tt_dashboard_data SET percentage_measure = ROUND(100*sum_measure/total_measure,pDecimalPoint)::numeric WHERE session_id = pSessionId AND id_data = pIdData; 
  86.  
  87.     INSERT INTO tt_dashboard_data_precision
  88.     (session_id, id_data, rank_id,
  89.     child_group, percentage,
  90.     total_percentage, sum_percentage)
  91.     SELECT session_id, id_data, RANK() OVER (PARTITION BY parent_group ORDER BY parent_group, sub_total DESC, id DESC),
  92.         child_group, percentage,
  93.         100, SUM(percentage) OVER (PARTITION BY parent_group)
  94.     FROM tt_dashboard_data
  95.     WHERE session_id = pSessionId AND id_data = pIdData;
  96.  
  97.     UPDATE tt_dashboard_data_precision
  98.     SET percentage = percentage - (sum_percentage - total_percentage)
  99.     WHERE session_id = pSessionId AND
  100.         rank_id = 1 AND
  101.         id_data = pIdData;
  102.        
  103.     INSERT INTO tt_dashboard_measure_precision
  104.     (session_id, id_data, rank_id,
  105.     child_group, percentage,
  106.     total_percentage, sum_percentage)
  107.     SELECT session_id, id_data, RANK() OVER (PARTITION BY parent_group ORDER BY parent_group, sum_measure DESC, id DESC),
  108.         child_group, percentage_measure,
  109.         100, SUM(percentage_measure) OVER (PARTITION BY parent_group)
  110.     FROM tt_dashboard_data
  111.     WHERE session_id = pSessionId AND id_data = pIdData;
  112.  
  113.     UPDATE tt_dashboard_measure_precision
  114.     SET percentage = percentage - (sum_percentage - total_percentage)
  115.     WHERE session_id = pSessionId AND
  116.         rank_id = 1 AND
  117.         id_data = pIdData;
  118.    
  119.  
  120.     INSERT INTO tt_output_data
  121.     (session_id, id_data,data_group_1,data_group_2,
  122.     data_group_3,data_group_4,data_group_5,
  123.     child_group,parent_group,
  124.     sum_measure,min_measure,max_measure,avg_measure,
  125.     sub_total,total,percentage,
  126.     total_measure, percentage_measure)
  127.     SELECT a.session_id, a.id_data, c.data_group_1, c.data_group_2,
  128.         c.data_group_3, c.data_group_4, c.data_group_5,
  129.         a.child_group, a.parent_group,
  130.         ROUND(a.sum_measure,pDecimalPoint) AS sum_measure,
  131.         ROUND(a.min_measure,pDecimalPoint) AS min_measure,
  132.         ROUND(a.max_measure,pDecimalPoint) AS max_measure,
  133.         ROUND(a.avg_measure,pDecimalPoint) AS avg_measure,
  134.         a.sub_total, a.total,
  135.         b.percentage,
  136.         a.total_measure, d.percentage
  137.     FROM tt_dashboard_data a,tt_dashboard_data_precision b,tt_group_data c, tt_dashboard_measure_precision d
  138.     WHERE a.session_id = b.session_id AND
  139.         a.child_group = b.child_group AND
  140.         a.id_data = b.id_data AND
  141.         a.session_id = pSessionId AND
  142.         a.id_data = pIdData AND
  143.         a.session_id = c.session_id AND
  144.         a.id_data = c.id_data AND
  145.         a.child_group = c.child_group AND
  146.         a.session_id = d.session_id AND
  147.         a.child_group = d.child_group AND
  148.         a.id_data = d.id_data
  149.     ORDER BY a.child_group;
  150.  
  151.     DELETE FROM tt_dashboard_data WHERE session_id = pSessionId AND id_data = pIdData;
  152.     DELETE FROM tt_dashboard_data_precision WHERE session_id = pSessionId AND id_data = pIdData;
  153.     DELETE FROM tt_dashboard_measure_precision WHERE session_id = pSessionId AND id_data = pIdData;
  154.     DELETE FROM tt_input_data WHERE session_id = pSessionId AND id_data=pIdData;
  155.     DELETE FROM tt_group_data WHERE session_id = pSessionId AND id_data=pIdData;
  156.        
  157. END;
  158. $BODY$
  159.   LANGUAGE plpgsql VOLATILE
  160.   COST 100;
  161.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement