2015-11-13 144 views
0

什麼是改善,簡化和加快我的SQL的這些部分的最佳方式?加速重複MySQL查詢

-- do pivoting 
drop temporary table if exists inverted; 
create temporary table inverted as 
select cast(s.name as char(30)) as name, 
    s.ename, 
    max(if(s.ts='00:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '0:30_it1', 
    max(if(s.ts='00:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '0:30_it2', 
    '#ffffff' as '0:30_color', 
    max(if(s.ts='01:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '1:30_it1', 
    max(if(s.ts='01:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '1:30_it2', 
     '#ffffff' as '1:30_color', 
    max(if(s.ts='02:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '2:30_it1', 
    max(if(s.ts='02:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '2:30_it2', 
    '#ffffff' as '2:30_color', 
    max(if(s.ts='03:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '3:30_it1', 
    max(if(s.ts='03:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '3:30_it2', 
    '#ffffff' as '3:30_color', 
    max(if(s.ts='04:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '4:30_it1', 
    max(if(s.ts='04:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '4:30_it2', 
    '#ffffff' as '4:30_color', 
    max(if(s.ts='05:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '5:30_it1', 
    max(if(s.ts='05:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '5:30_it2', 
    '#ffffff' as '5:30_color', 
    max(if(s.ts='06:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '6:30_it1', 
    max(if(s.ts='06:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '6:30_it2', 
     '#ffffff' as '6:30_color', 
    max(if(s.ts='07:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '7:30_it1', 
    max(if(s.ts='07:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '7:30_it2', 
    '#ffffff' as '7:30_color', 
    max(if(s.ts='08:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '8:30_it1', 
    max(if(s.ts='08:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '8:30_it2', 
     '#ffffff' as '8:30_color', 
    max(if(s.ts='09:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '9:30_it1', 
    max(if(s.ts='09:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '9:30_it2', 
     '#ffffff' as '9:30_color', 
    max(if(s.ts='10:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '10:30_it1', 
    max(if(s.ts='10:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '10:30_it2', 
     '#ffffff' as '10:30_color', 
    max(if(s.ts='11:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '11:30_it1', 
    max(if(s.ts='11:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '11:30_it2', 
    '#ffffff' as '11:30_color', 
    max(if(s.ts='12:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '12:30_it1', 
    max(if(s.ts='12:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '12:30_it2', 
    '#ffffff' as '12:30_color', 
    max(if(s.ts='13:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '13:30_it1', 
    max(if(s.ts='13:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '13:30_it2', 
    '#ffffff' as '13:30_color', 
    max(if(s.ts='14:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '14:30_it1', 
    max(if(s.ts='14:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '14:30_it2', 
    '#ffffff' as '14:30_color', 
    max(if(s.ts='15:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '15:30_it1', 
    max(if(s.ts='15:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '15:30_it2', 
    '#ffffff' as '15:30_color', 
    max(if(s.ts='16:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '16:30_it1', 
    max(if(s.ts='16:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '16:30_it2', 
    '#ffffff' as '16:30_color', 
    max(if(s.ts='17:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '17:30_it1', 
    max(if(s.ts='17:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '17:30_it2', 
    '#ffffff' as '17:30_color', 
    max(if(s.ts='18:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '18:30_it1', 
    max(if(s.ts='18:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '18:30_it2', 
    '#ffffff' as '18:30_color', 
    max(if(s.ts='19:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '19:30_it1', 
    max(if(s.ts='19:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '19:30_it2', 
    '#ffffff' as '19:30_color', 
    max(if(s.ts='20:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '20:30_it1', 
    max(if(s.ts='20:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '20:30_it2', 
    '#ffffff' as '20:30_color', 
    max(if(s.ts='21:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '21:30_it1', 
    max(if(s.ts='21:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '21:30_it2', 
    '#ffffff' as '21:30_color', 
    max(if(s.ts='22:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '22:30_it1', 
    max(if(s.ts='22:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '22:30_it2', 
     '#ffffff' as '22:30_color', 
    max(if(s.ts='23:30:00', cast(s.value_t1 as decimal(9,2)), null)) as '23:30_it1', 
    max(if(s.ts='23:30:00', cast(s.value_t2 as decimal(9,2)), null)) as '23:30_it2', 
    '#ffffff' as '23:30_color', 
    cast(null as time) as hour, 
    cast(null as decimal(9,2)) as value, 
    cast(null as char(17)) as series, 
    table_chart 
from splitted_table s 
group by s.table_chart, s.name, s.ename; 

UPDATE inverted SET `0:30_color` = fn_rep_get_color_for_field(`0:30_it1`, `0:30_it2`, p_min, p_max), `1:30_color` = fn_rep_get_color_for_field(`1:30_it1`, `1:30_it2`, p_min, p_max), 
        `2:30_color` = fn_rep_get_color_for_field(`2:30_it1`, `2:30_it2`, p_min, p_max), `3:30_color` = fn_rep_get_color_for_field(`3:30_it1`, `3:30_it2`, p_min, p_max), 
          `4:30_color` = fn_rep_get_color_for_field(`4:30_it1`, `4:30_it2`, p_min, p_max), `5:30_color` = fn_rep_get_color_for_field(`5:30_it1`, `5:30_it2`, p_min, p_max), 
          `6:30_color` = fn_rep_get_color_for_field(`6:30_it1`, `6:30_it2`, p_min, p_max), `7:30_color` = fn_rep_get_color_for_field(`7:30_it1`, `7:30_it2`, p_min, p_max), 
          `8:30_color` = fn_rep_get_color_for_field(`8:30_it1`, `8:30_it2`, p_min, p_max), `9:30_color` = fn_rep_get_color_for_field(`9:30_it1`, `9:30_it2`, p_min, p_max), 
          `10:30_color` = fn_rep_get_color_for_field(`10:30_it1`, `10:30_it2`, p_min, p_max), `11:30_color` = fn_rep_get_color_for_field(`11:30_it1`, `11:30_it2`, p_min, p_max), 
          `12:30_color` = fn_rep_get_color_for_field(`12:30_it1`, `12:30_it2`, p_min, p_max), `13:30_color` = fn_rep_get_color_for_field(`13:30_it1`, `13:30_it2`, p_min, p_max), 
          `14:30_color` = fn_rep_get_color_for_field(`14:30_it1`, `14:30_it2`, p_min, p_max), `15:30_color` = fn_rep_get_color_for_field(`15:30_it1`, `15:30_it2`, p_min, p_max), 
          `16:30_color` = fn_rep_get_color_for_field(`16:30_it1`, `16:30_it2`, p_min, p_max), `17:30_color` = fn_rep_get_color_for_field(`17:30_it1`, `17:30_it2`, p_min, p_max), 
          `18:30_color` = fn_rep_get_color_for_field(`18:30_it1`, `18:30_it2`, p_min, p_max), `19:30_color` = fn_rep_get_color_for_field(`19:30_it1`, `19:30_it2`, p_min, p_max), 
          `20:30_color` = fn_rep_get_color_for_field(`20:30_it1`, `20:30_it2`, p_min, p_max), `21:30_color` = fn_rep_get_color_for_field(`21:30_it1`, `21:30_it2`, p_min, p_max), 
          `22:30_color` = fn_rep_get_color_for_field(`22:30_it1`, `22:30_it2`, p_min, p_max), `23:30_color` = fn_rep_get_color_for_field(`23:30_it1`, `23:30_it2`, p_min, p_max) 
          where SUBSTRING(table_chart, 2, 1) = 'p'; 

UPDATE inverted SET `0:30_color` = fn_rep_get_color_for_field(`0:30_it1`, `0:30_it2`, q_min, q_max), `1:30_color` = fn_rep_get_color_for_field(`1:30_it1`, `1:30_it2`, q_min, q_max), 
        `2:30_color` = fn_rep_get_color_for_field(`2:30_it1`, `2:30_it2`, q_min, q_max), `3:30_color` = fn_rep_get_color_for_field(`3:30_it1`, `3:30_it2`, q_min, q_max), 
          `4:30_color` = fn_rep_get_color_for_field(`4:30_it1`, `4:30_it2`, q_min, q_max), `5:30_color` = fn_rep_get_color_for_field(`5:30_it1`, `5:30_it2`, q_min, q_max), 
          `6:30_color` = fn_rep_get_color_for_field(`6:30_it1`, `6:30_it2`, q_min, q_max), `7:30_color` = fn_rep_get_color_for_field(`7:30_it1`, `7:30_it2`, q_min, q_max), 
          `8:30_color` = fn_rep_get_color_for_field(`8:30_it1`, `8:30_it2`, q_min, q_max), `9:30_color` = fn_rep_get_color_for_field(`9:30_it1`, `9:30_it2`, q_min, q_max), 
          `10:30_color` = fn_rep_get_color_for_field(`10:30_it1`, `10:30_it2`, q_min, q_max), `11:30_color` = fn_rep_get_color_for_field(`11:30_it1`, `11:30_it2`, q_min, q_max), 
          `12:30_color` = fn_rep_get_color_for_field(`12:30_it1`, `12:30_it2`, q_min, q_max), `13:30_color` = fn_rep_get_color_for_field(`13:30_it1`, `13:30_it2`, q_min, q_max), 
          `14:30_color` = fn_rep_get_color_for_field(`14:30_it1`, `14:30_it2`, q_min, q_max), `15:30_color` = fn_rep_get_color_for_field(`15:30_it1`, `15:30_it2`, q_min, q_max), 
          `16:30_color` = fn_rep_get_color_for_field(`16:30_it1`, `16:30_it2`, q_min, q_max), `17:30_color` = fn_rep_get_color_for_field(`17:30_it1`, `17:30_it2`, q_min, q_max), 
          `18:30_color` = fn_rep_get_color_for_field(`18:30_it1`, `18:30_it2`, q_min, q_max), `19:30_color` = fn_rep_get_color_for_field(`19:30_it1`, `19:30_it2`, q_min, q_max), 
          `20:30_color` = fn_rep_get_color_for_field(`20:30_it1`, `20:30_it2`, q_min, q_max), `21:30_color` = fn_rep_get_color_for_field(`21:30_it1`, `21:30_it2`, q_min, q_max), 
          `22:30_color` = fn_rep_get_color_for_field(`22:30_it1`, `22:30_it2`, q_min, q_max), `23:30_color` = fn_rep_get_color_for_field(`23:30_it1`, `23:30_it2`, q_min, q_max) 
          where SUBSTRING(table_chart, 2, 1) = 'q'; 

UPDATE inverted SET `0:30_color` = fn_rep_get_color_for_field(`0:30_it1`, `0:30_it2`, u_min, u_max), `1:30_color` = fn_rep_get_color_for_field(`1:30_it1`, `1:30_it2`, u_min, u_max), 
        `2:30_color` = fn_rep_get_color_for_field(`2:30_it1`, `2:30_it2`, u_min, u_max), `3:30_color` = fn_rep_get_color_for_field(`3:30_it1`, `3:30_it2`, u_min, u_max), 
          `4:30_color` = fn_rep_get_color_for_field(`4:30_it1`, `4:30_it2`, u_min, u_max), `5:30_color` = fn_rep_get_color_for_field(`5:30_it1`, `5:30_it2`, u_min, u_max), 
          `6:30_color` = fn_rep_get_color_for_field(`6:30_it1`, `6:30_it2`, u_min, u_max), `7:30_color` = fn_rep_get_color_for_field(`7:30_it1`, `7:30_it2`, u_min, u_max), 
          `8:30_color` = fn_rep_get_color_for_field(`8:30_it1`, `8:30_it2`, u_min, u_max), `9:30_color` = fn_rep_get_color_for_field(`9:30_it1`, `9:30_it2`, u_min, u_max), 
          `10:30_color` = fn_rep_get_color_for_field(`10:30_it1`, `10:30_it2`, u_min, u_max), `11:30_color` = fn_rep_get_color_for_field(`11:30_it1`, `11:30_it2`, u_min, u_max), 
          `12:30_color` = fn_rep_get_color_for_field(`12:30_it1`, `12:30_it2`, u_min, u_max), `13:30_color` = fn_rep_get_color_for_field(`13:30_it1`, `13:30_it2`, u_min, u_max), 
          `14:30_color` = fn_rep_get_color_for_field(`14:30_it1`, `14:30_it2`, u_min, u_max), `15:30_color` = fn_rep_get_color_for_field(`15:30_it1`, `15:30_it2`, u_min, u_max), 
          `16:30_color` = fn_rep_get_color_for_field(`16:30_it1`, `16:30_it2`, u_min, u_max), `17:30_color` = fn_rep_get_color_for_field(`17:30_it1`, `17:30_it2`, u_min, u_max), 
          `18:30_color` = fn_rep_get_color_for_field(`18:30_it1`, `18:30_it2`, u_min, u_max), `19:30_color` = fn_rep_get_color_for_field(`19:30_it1`, `19:30_it2`, u_min, u_max), 
          `20:30_color` = fn_rep_get_color_for_field(`20:30_it1`, `20:30_it2`, u_min, u_max), `21:30_color` = fn_rep_get_color_for_field(`21:30_it1`, `21:30_it2`, u_min, u_max), 
          `22:30_color` = fn_rep_get_color_for_field(`22:30_it1`, `22:30_it2`, u_min, u_max), `23:30_color` = fn_rep_get_color_for_field(`23:30_it1`, `23:30_it2`, u_min, u_max) 
          where SUBSTRING(table_chart, 2, 1) = 'u'; 

DROP TEMPORARY TABLE IF EXISTS deviation; 
CREATE TEMPORARY TABLE deviation LIKE inverted; 

insert into export_data.deviation (`name`,`0:30_it1`,`1:30_it1`,`2:30_it1`,`3:30_it1`,`4:30_it1`,`5:30_it1`,`6:30_it1`,`7:30_it1`,`8:30_it1`,`9:30_it1`,`10:30_it1`,`11:30_it1`,`12:30_it1`,`13:30_it1`,`14:30_it1`,`15:30_it1`,`16:30_it1`,`17:30_it1`,`18:30_it1`,`19:30_it1`,`20:30_it1`,`21:30_it1`,`22:30_it1`,`23:30_it1`, 
            `0:30_it2`,`1:30_it2`,`2:30_it2`,`3:30_it2`,`4:30_it2`,`5:30_it2`,`6:30_it2`,`7:30_it2`,`8:30_it2`,`9:30_it2`,`10:30_it2`,`11:30_it2`,`12:30_it2`,`13:30_it2`,`14:30_it2`,`15:30_it2`,`16:30_it2`,`17:30_it2`,`18:30_it2`,`19:30_it2`,`20:30_it2`,`21:30_it2`,`22:30_it2`,`23:30_it2`,`table_chart`) 
SELECT 
    'table footer' as name, 
    SUM(abs(`0:30_it1`-`0:30_it2`)) as `0:30_it1`, 
    SUM(abs(`1:30_it1`-`1:30_it2`)) as `1:30_it1`, 
    SUM(abs(`2:30_it1`-`2:30_it2`)) as `2:30_it1`, 
    SUM(abs(`3:30_it1`-`3:30_it2`)) as `3:30_it1`, 
    SUM(abs(`4:30_it1`-`4:30_it2`)) as `4:30_it1`, 
    SUM(abs(`5:30_it1`-`5:30_it2`)) as `5:30_it1`, 
    SUM(abs(`6:30_it1`-`6:30_it2`)) as `6:30_it1`, 
    SUM(abs(`7:30_it1`-`7:30_it2`)) as `7:30_it1`, 
    SUM(abs(`8:30_it1`-`8:30_it2`)) as `8:30_it1`, 
    SUM(abs(`9:30_it1`-`9:30_it2`)) as `9:30_it1`, 
    SUM(abs(`10:30_it1`-`10:30_it2`)) as `10:30_it1`, 
    SUM(abs(`11:30_it1`-`11:30_it2`)) as `11:30_it1`, 
    SUM(abs(`12:30_it1`-`12:30_it2`)) as `12:30_it1`, 
    SUM(abs(`13:30_it1`-`13:30_it2`)) as `13:30_it1`, 
    SUM(abs(`14:30_it1`-`14:30_it2`)) as `14:30_it1`, 
    SUM(abs(`15:30_it1`-`15:30_it2`)) as `15:30_it1`, 
    SUM(abs(`16:30_it1`-`16:30_it2`)) as `16:30_it1`, 
    SUM(abs(`17:30_it1`-`17:30_it2`)) as `17:30_it1`, 
    SUM(abs(`18:30_it1`-`18:30_it2`)) as `18:30_it1`, 
    SUM(abs(`19:30_it1`-`19:30_it2`)) as `19:30_it1`, 
    SUM(abs(`20:30_it1`-`20:30_it2`)) as `20:30_it1`, 
    SUM(abs(`21:30_it1`-`21:30_it2`)) as `21:30_it1`, 
    SUM(abs(`22:30_it1`-`22:30_it2`)) as `22:30_it1`, 
    SUM(abs(`23:30_it1`-`23:30_it2`)) as `23:30_it1`, 
    MAX(abs(`0:30_it1`-`0:30_it2`)) as `0:30_it2`, 
    MAX(abs(`1:30_it1`-`1:30_it2`)) as `1:30_it2`, 
    MAX(abs(`2:30_it1`-`2:30_it2`)) as `2:30_it2`, 
    MAX(abs(`3:30_it1`-`3:30_it2`)) as `3:30_it2`, 
    MAX(abs(`4:30_it1`-`4:30_it2`)) as `4:30_it2`, 
    MAX(abs(`5:30_it1`-`5:30_it2`)) as `5:30_it2`, 
    MAX(abs(`6:30_it1`-`6:30_it2`)) as `6:30_it2`, 
    MAX(abs(`7:30_it1`-`7:30_it2`)) as `7:30_it2`, 
    MAX(abs(`8:30_it1`-`8:30_it2`)) as `8:30_it2`, 
    MAX(abs(`9:30_it1`-`9:30_it2`)) as `9:30_it2`, 
    MAX(abs(`10:30_it1`-`10:30_it2`)) as `10:30_it2`, 
    MAX(abs(`11:30_it1`-`11:30_it2`)) as `11:30_it2`, 
    MAX(abs(`12:30_it1`-`12:30_it2`)) as `12:30_it2`, 
    MAX(abs(`13:30_it1`-`13:30_it2`)) as `13:30_it2`, 
    MAX(abs(`14:30_it1`-`14:30_it2`)) as `14:30_it2`, 
    MAX(abs(`15:30_it1`-`15:30_it2`)) as `15:30_it2`, 
    MAX(abs(`16:30_it1`-`16:30_it2`)) as `16:30_it2`, 
    MAX(abs(`17:30_it1`-`17:30_it2`)) as `17:30_it2`, 
    MAX(abs(`18:30_it1`-`18:30_it2`)) as `18:30_it2`, 
    MAX(abs(`19:30_it1`-`19:30_it2`)) as `19:30_it2`, 
    MAX(abs(`20:30_it1`-`20:30_it2`)) as `20:30_it2`, 
    MAX(abs(`21:30_it1`-`21:30_it2`)) as `21:30_it2`, 
    MAX(abs(`22:30_it1`-`22:30_it2`)) as `22:30_it2`, 
    MAX(abs(`23:30_it1`-`23:30_it2`)) as `23:30_it2`, 
    CONCAT('s',SUBSTRING(table_chart,2)) as table_chart 
from export_data.inverted 
group by table_chart; 

目前,它需要太多的時間,我覺得可能是不是一次又一次的重複代碼的一些更簡單的方法,但我不知道怎麼樣。

+0

所以你沒有任何一種表示層? – Strawberry

+0

這只是正在運行的大MySQL腳本的一部分,然後將報告導出到Excel表中。 –

+0

爲什麼你需要大量的鑄造?避免這會節省一些時間。 – gaborsch

回答

2

非常奇怪的查詢,但看起來像你正在做一個基於半小時增量的T1和T2值的數據透視表樣式查詢。我會堅持下去,直到預先聚合了獨特的行。由於您的「ts」列看起來代表「時隙」,並且半小時增量沒有變化,所以我會先將您的第一個查詢簡化爲下一個。

drop temporary table if exists inverted; 
create temporary table inverted as 
select 
     s.table_chart, 
     cast(s.name as char(30)) as name, 
     s.ename, 
     s.ts, 
     MAX(CAST(s.value_t1 as decimal(9,2)) as t1Val, 
     MAX(CAST(s.value_t2 as decimal(9,2)) as t2Val, 
     '#ffffff' as tsColor 
from 
    splitted_table s 
group by 
    s.table_chart, 
    s.name, 
    s.ename, 
    s.ts 

所以,現在,您可以在每個圖表,名稱,爲ename 24時隙行,但在自己的行已經預聚合。您的下一個UPDATE可以針對通用行進行簡化。我刪除了你的(小時,值,系列)列,因爲它們在最後一次插入之前沒有使用過,所以我在那裏添加了它們。

UPDATE inverted 
    SET tsColor = fn_rep_get_color_for_field(t1Val, t2Val, p_min, p_max) 
    where SUBSTRING(table_chart, 2, 1) = 'p'; 

UPDATE inverted 
    SET tsColor = fn_rep_get_color_for_field(t1Val, t2Val, q_min, q_max) 
    where SUBSTRING(table_chart, 2, 1) = 'q'; 

UPDATE inverted 
    SET tsColor = fn_rep_get_color_for_field(t1Val, t2Val, u_min, u_max) 
    where SUBSTRING(table_chart, 2, 1) = 'u'; 

現在,您可以透視。由於您的第一個查詢是按表格和名稱分組的,因此根據相應的T1或T2值獲取MAX()值時,每個時隙/表格圖表/ eName只會有一條記錄。

DROP TEMPORARY TABLE IF EXISTS deviation; 
CREATE TEMPORARY TABLE deviation as 
select 
     'table footer' as name, 
     SUM(if(i.ts='00:30:00', ABS(i.t1Val - i.t2Val), 0)) as '0:30_it1', 
     SUM(if(i.ts='01:30:00', ABS(i.t1Val - i.t2Val), 0)) as '1:30_it1', 
     SUM(if(i.ts='02:30:00', ABS(i.t1Val - i.t2Val), 0)) as '2:30_it1', 
     SUM(if(i.ts='03:30:00', ABS(i.t1Val - i.t2Val), 0)) as '3:30_it1', 
     SUM(if(i.ts='04:30:00', ABS(i.t1Val - i.t2Val), 0)) as '4:30_it1', 
     SUM(if(i.ts='05:30:00', ABS(i.t1Val - i.t2Val), 0)) as '5:30_it1', 
     SUM(if(i.ts='06:30:00', ABS(i.t1Val - i.t2Val), 0)) as '6:30_it1', 
     SUM(if(i.ts='07:30:00', ABS(i.t1Val - i.t2Val), 0)) as '7:30_it1', 
     SUM(if(i.ts='08:30:00', ABS(i.t1Val - i.t2Val), 0)) as '8:30_it1', 
     SUM(if(i.ts='09:30:00', ABS(i.t1Val - i.t2Val), 0)) as '9:30_it1', 
     SUM(if(i.ts='10:30:00', ABS(i.t1Val - i.t2Val), 0)) as '10:30_it1', 
     SUM(if(i.ts='11:30:00', ABS(i.t1Val - i.t2Val), 0)) as '11:30_it1', 
     SUM(if(i.ts='12:30:00', ABS(i.t1Val - i.t2Val), 0)) as '12:30_it1', 
     SUM(if(i.ts='13:30:00', ABS(i.t1Val - i.t2Val), 0)) as '13:30_it1', 
     SUM(if(i.ts='14:30:00', ABS(i.t1Val - i.t2Val), 0)) as '14:30_it1', 
     SUM(if(i.ts='15:30:00', ABS(i.t1Val - i.t2Val), 0)) as '15:30_it1', 
     SUM(if(i.ts='16:30:00', ABS(i.t1Val - i.t2Val), 0)) as '16:30_it1', 
     SUM(if(i.ts='17:30:00', ABS(i.t1Val - i.t2Val), 0)) as '17:30_it1', 
     SUM(if(i.ts='18:30:00', ABS(i.t1Val - i.t2Val), 0)) as '18:30_it1', 
     SUM(if(i.ts='19:30:00', ABS(i.t1Val - i.t2Val), 0)) as '19:30_it1', 
     SUM(if(i.ts='20:30:00', ABS(i.t1Val - i.t2Val), 0)) as '20:30_it1', 
     SUM(if(i.ts='21:30:00', ABS(i.t1Val - i.t2Val), 0)) as '21:30_it1', 
     SUM(if(i.ts='22:30:00', ABS(i.t1Val - i.t2Val), 0)) as '22:30_it1', 
     SUM(if(i.ts='23:30:00', ABS(i.t1Val - i.t2Val), 0)) as '23:30_it1', 
     MAX(if(i.ts='00:30:00', ABS(i.t1Val - i.t2Val), 0)) as '0:30_it2', 
     MAX(if(i.ts='01:30:00', ABS(i.t1Val - i.t2Val), 0)) as '1:30_it2', 
     MAX(if(i.ts='02:30:00', ABS(i.t1Val - i.t2Val), 0)) as '2:30_it2', 
     MAX(if(i.ts='03:30:00', ABS(i.t1Val - i.t2Val), 0)) as '3:30_it2', 
     MAX(if(i.ts='04:30:00', ABS(i.t1Val - i.t2Val), 0)) as '4:30_it2', 
     MAX(if(i.ts='05:30:00', ABS(i.t1Val - i.t2Val), 0)) as '5:30_it2', 
     MAX(if(i.ts='06:30:00', ABS(i.t1Val - i.t2Val), 0)) as '6:30_it2', 
     MAX(if(i.ts='07:30:00', ABS(i.t1Val - i.t2Val), 0)) as '7:30_it2', 
     MAX(if(i.ts='08:30:00', ABS(i.t1Val - i.t2Val), 0)) as '8:30_it2', 
     MAX(if(i.ts='09:30:00', ABS(i.t1Val - i.t2Val), 0)) as '9:30_it2', 
     MAX(if(i.ts='10:30:00', ABS(i.t1Val - i.t2Val), 0)) as '10:30_it2', 
     MAX(if(i.ts='11:30:00', ABS(i.t1Val - i.t2Val), 0)) as '11:30_it2', 
     MAX(if(i.ts='12:30:00', ABS(i.t1Val - i.t2Val), 0)) as '12:30_it2', 
     MAX(if(i.ts='13:30:00', ABS(i.t1Val - i.t2Val), 0)) as '13:30_it2', 
     MAX(if(i.ts='14:30:00', ABS(i.t1Val - i.t2Val), 0)) as '14:30_it2', 
     MAX(if(i.ts='15:30:00', ABS(i.t1Val - i.t2Val), 0)) as '15:30_it2', 
     MAX(if(i.ts='16:30:00', ABS(i.t1Val - i.t2Val), 0)) as '16:30_it2', 
     MAX(if(i.ts='17:30:00', ABS(i.t1Val - i.t2Val), 0)) as '17:30_it2', 
     MAX(if(i.ts='18:30:00', ABS(i.t1Val - i.t2Val), 0)) as '18:30_it2', 
     MAX(if(i.ts='19:30:00', ABS(i.t1Val - i.t2Val), 0)) as '19:30_it2', 
     MAX(if(i.ts='20:30:00', ABS(i.t1Val - i.t2Val), 0)) as '20:30_it2', 
     MAX(if(i.ts='21:30:00', ABS(i.t1Val - i.t2Val), 0)) as '21:30_it2', 
     MAX(if(i.ts='22:30:00', ABS(i.t1Val - i.t2Val), 0)) as '22:30_it2', 
     MAX(if(i.ts='23:30:00', ABS(i.t1Val - i.t2Val), 0)) as '23:30_it2', 
     cast(null as time) as hour, 
     cast(null as decimal(9,2)) as value, 
     cast(null as char(17)) as series, 
     CONCAT('s',SUBSTRING(i.table_chart,2)) as table_chart 
from 
    export_data.inverted 
group by 
    table_chart; 

現在,爲您的顏色。既然你從不查詢這些,他們甚至不會成爲你結果集的一部分,並且根據「p」,「q」或「u」值可能會有不同的值,你希望對其他... MIN,MAX,還是一個特別基於「u」的勝利?或者可能是「p」?你將不得不添加IF()或case /當這樣的東西......

你的表結構將有基於你原來的樞軸查詢結構和CREATE LIKE條件,但由於你從來沒有插入到那些專欄,他們一直都是空白的。所以爲了您的額外時間,價值觀,系列欄目。

MAX(if(i.ts='00:30:00', 
     case when SUBSTR(i.table_chart, 2, 1) = 'p' then i.tsColor 
       when SUBSTR(i.table_chart, 2, 1) = 'q' then i.tsColor 
       ELSE i.tsColor end, 
     null)) as '0:30:00_Color', 
etc for rest of colors. 

希望這可以幫助您從另一個角度看到可能的解決方案。