Browse Source

Virtuelle Tabellen und Spaltenlayouts vorberechnen #10

master
Daniel Quathamer 3 weeks ago
parent
commit
07b233bf35
  1. 1
      src-modules/module/rpta/hilfstabellen/fill_rpta_column_layout.sql
  2. 91
      src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql

1
src-modules/module/rpta/hilfstabellen/fill_rpta_column_layout.sql

@ -143,6 +143,7 @@ drop table if exists tmp_gesamt; @@ -143,6 +143,7 @@ drop table if exists tmp_gesamt;
</#if> --wenn columns?has_content
drop table ${column_layout.resultset_tablename};
</#foreach> -- Ende Schleife column_layouts
</#if> --gibt es column_layouts

91
src-modules/module/rpta/hilfstabellen/fill_rpta_resultset.sql

@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
--Freemarker Template
<#include "SQL_lingua_franca"/>
<#include "SuperX_general"/>
--
--Autor D. Quathamer 2024
<sqlvars>
<sqlvar name="basetables" type="hashsequence"><![CDATA[
SELECT distinct T.name,
R.is_virtual,
T.name as runtime_tablename,
R.caption,
R.uniquename,
R.fieldclause,
R.joinclause,
R.whereclause,
R.systeminfo_id
from sx_tables T, rpta_resultset R
where T.name=R.uniquename
and R.is_virtual=0
]]>
</sqlvar>
<sqlvar name="basetable_columns" type="hashsequence"><![CDATA[
SELECT distinct T.name as table_name,
F.name,
F.is_sum
from sx_tables T, rpta_resultset R , sx_fields F
where T.name=R.uniquename
and R.is_virtual=0
and F.table_name=T.name
order by F.is_sum,2,3
]]>
</sqlvar>
</sqlvars>
<#if basetables?has_content>
<#foreach basetable in basetables>
<#if basetable.is_virtual==0>
drop table if exists ${basetable.runtime_tablename};
create temp table tmp_${basetable.runtime_tablename} as
select ${basetable.fieldclause} ,
today() as creation_date
from ${basetable.joinclause}
where 1=1
<#if basetable.whereclause != "">
${basetable.whereclause} </#if>
;
--Summierung:
<#if basetable_columns?has_content>
<#assign groupby=0 />
create table ${basetable.runtime_tablename} as
select
<#foreach basetable_column in basetable_columns>
<#if basetable_column.is_sum=0>
<#assign groupby=groupby+1 />
${basetable_column.name},
<#else>
sum(${basetable_column.name})::float as ${basetable_column.name},
</#if>
</#foreach>
creation_date
from tmp_${basetable.runtime_tablename}
group by
<#list 1..groupby as i>${i},
</#list>
creation_date
;
drop table tmp_${basetable.runtime_tablename};
</#if> --Ende Summierung
--TODO: indizes
create index ix_geschlecht_dashboard_mw on ${basetable.runtime_tablename}(geschlecht);
create index ix_tid_stg_dashboard_mw on ${basetable.runtime_tablename}(tid_stg);
create index ix_sem_rueck_beur_ein_dashboard_mw on ${basetable.runtime_tablename}(sem_rueck_beur_ein);
</#if> --Ende is_virtual=0
</#foreach>
</#if>
Loading…
Cancel
Save