Hallo PG-Forum,
ich habe mit PG9.6 unter Zuhilfenahme von pgAdmin3 funktionierende crosstab-selects für Pivot-Ausgaben gebastelt.
Daraus möchte ich nun Views machen. Dabei scheitere ich und habe nun die Hoffnung, dass mir vielleicht hier jemand auf die Sprünge helfen kann.
Hier das funktionierende crosstab-select:
select *
from crosstab ('
SELECT risa_mitarbeiter.str_nachname, risa_mitarbeiter.str_vorname, ref_mitarbeiter, l_tagnr, sum(l_arbeitszeit)
FROM risa_monatsterminplan
JOIN risa_mitarbeiter ON risa_monatsterminplan.ref_mitarbeiter = risa_mitarbeiter.lid
WHERE l_jahr = 2018
GROUP BY risa_mitarbeiter.str_nachname, risa_mitarbeiter.str_vorname, ref_mitarbeiter, risa_monatsterminplan.l_tagnr
ORDER BY 1
','
SELECT DISTINCT l_tagnr
FROM risa_monatsterminplan
ORDER BY 1
')
AS ("Nachname" text, "Vorname" text, "ref_mitarbeiter" int, "Sonntag" int, "Montag" int, "Dienstag" int, "Mittwoch" int, "Donnerstag" int, "Freitag" int, "Samstag" int);
Hier die Anweisung für den View:
CREATE OR REPLACE VIEW public.risa_crosstabtest1 AS
select *
from crosstab ('
SELECT risa_mitarbeiter.str_nachname, risa_mitarbeiter.str_vorname, ref_mitarbeiter, l_tagnr, sum(l_arbeitszeit)
FROM risa_monatsterminplan
JOIN risa_mitarbeiter ON risa_monatsterminplan.ref_mitarbeiter = risa_mitarbeiter.lid
WHERE l_jahr = 2018
GROUP BY risa_mitarbeiter.str_nachname, risa_mitarbeiter.str_vorname, ref_mitarbeiter, risa_monatsterminplan.l_tagnr
ORDER BY 1
','
SELECT DISTINCT l_tagnr
FROM risa_monatsterminplan
ORDER BY 1
')
AS ("Nachname" text, "Vorname" text, "ref_mitarbeiter" int, "Sonntag" int, "Montag" int, "Dienstag" int, "Mittwoch" int, "Donnerstag" int, "Freitag" int, "Samstag" int);
ALTER TABLE public.risa_crosstabtest1
OWNER TO postgres;
pgAdmin macht dann folgenden View daraus:
-- View: public.risa_crosstabtest1
-- DROP VIEW public.risa_crosstabtest1;
CREATE OR REPLACE VIEW public.risa_crosstabtest1 AS
SELECT crosstab."Nachname",
crosstab."Vorname",
crosstab.ref_mitarbeiter,
crosstab."Sonntag",
crosstab."Montag",
crosstab."Dienstag",
crosstab."Mittwoch",
crosstab."Donnerstag",
crosstab."Freitag",
crosstab."Samstag"
FROM crosstab('
SELECT risa_mitarbeiter.str_nachname, risa_mitarbeiter.str_vorname, ref_mitarbeiter, l_tagnr, sum(l_arbeitszeit)
FROM risa_monatsterminplan
JOIN risa_mitarbeiter ON risa_monatsterminplan.ref_mitarbeiter = risa_mitarbeiter.lid
WHERE l_jahr = 2018
GROUP BY risa_mitarbeiter.str_nachname, risa_mitarbeiter.str_vorname, ref_mitarbeiter, risa_monatsterminplan.l_tagnr
ORDER BY 1
'::text, '
SELECT DISTINCT l_tagnr
FROM risa_monatsterminplan
ORDER BY 1
'::text) crosstab("Nachname" text, "Vorname" text, ref_mitarbeiter integer, "Sonntag" integer, "Montag" integer, "Dienstag" integer, "Mittwoch" integer, "Donnerstag" integer, "Freitag" integer, "Samstag" integer);
ALTER TABLE public.risa_crosstabtest1
OWNER TO postgres;
Der funktioniert natürlich nicht. Was kann ich tun? Hat jemand vielleicht eine Idee?
Herzlichen Dank fürs Mitdenken