Gehaltshistorie, MIN-Problem

06/09/2010 - 11:22 von Stefan Wirrer | Report spam
Hallo,

ich habe ein Problem bei der Erstellung der Gehaltsentwicklung
der Mitarbeiter.
In der Gehaltstabelle werden monatlich die Gehaltsdaten gespeichert:
Grundgehalt, Zulage (hier mal vereinfacht).
Die Tabelle sieht also so aus:
Datum, Gehaltsart, Wert
01.01.2010, '100', 2000
01.01.2010, '200', 100
01.02.2010, '100', 2000
01.02.2010, '200', 100
01.03.2010, '100', 2000
01.03.2010, '200', 300
01.04.2010, '100', 2000
01.04.2010, '200', 100

Gewünschte Darstellung (ab wann tritt Gehaltsànderung ein):
01.01.2010, 2000, 100
01.03.2010, 2000, 300
01.04.2010, 2000, 100

Das ist das vereinfachte Postgres-SQL-Statement:
SELECT MIN(sal_date) as sal_date, "100", "200"
FROM crosstab(
'SELECT sal.salary_from, sal.salary_fk_description, sal.salary_value
FROM tbl_salary as sal
WHERE sal.salary_fk_employee = 7470
AND sal.salary_fk_description In (''100'', ''200'')
GROUP BY sal.salary_from, sal.salary_fk_description, sal.salary_value
ORDER BY sal.salary_from',
'SELECT distinct salary_fk_description
FROM tbl_salary
WHERE tbl_salary.salary_fk_description In (''100'', ''200'')
ORDER BY salary_fk_description')
AS (sal_date timestamp, "100" numeric, "200" numeric)
GROUP BY "100", "200"
ORDER BY sal_date;

Crosstab ist die Kreuztablle in PG

Vereinfacht:
SELECT MIN(sal_date) as sal_date, "100", "200"
FROM Kreuztabelle
GROUP BY "100", "200"
ORDER BY sal_date;

Leider bekomme ich so nur die ersten beiden Ergebis-Zeilen geliefert.
Wie kann man feststellen, ob sich gegenüber dem Vormaonat was ge-
àndert hat auch wenn das Ergebnis früher schon mal da war?

Kann man das per SQL lösen?

Danke für's Nachdenken.


Gruß
aus München

Stefan

Stefan.Wirrer@volke-muc.de

Access-FAQ: http://www.donkarl.com/AccessFAQ.htm
KnowHow-MDB: http://www.freeaccess.de/
Infos für Neulinge in den Access-Newsgroups:
http://www.doerbandt.de/access/Newbie.htm
Stammtisch: http://www.access-muenchen.de/
 

Lesen sie die antworten

#1 Stefan Wirrer
07/09/2010 - 14:23 | Warnen spam
Hallo,

kurze Rückinfo:
ich hab das jetzt mit einer Funktion gelöst.

Servus
Stefan

Stefan Wirrer schreibselte:
Hallo,

ich habe ein Problem bei der Erstellung der Gehaltsentwicklung
der Mitarbeiter.
In der Gehaltstabelle werden monatlich die Gehaltsdaten gespeichert:
Grundgehalt, Zulage (hier mal vereinfacht).
Die Tabelle sieht also so aus:
Datum, Gehaltsart, Wert
01.01.2010, '100', 2000
01.01.2010, '200', 100
01.02.2010, '100', 2000
01.02.2010, '200', 100
01.03.2010, '100', 2000
01.03.2010, '200', 300
01.04.2010, '100', 2000
01.04.2010, '200', 100

Gewünschte Darstellung (ab wann tritt Gehaltsànderung ein):
01.01.2010, 2000, 100
01.03.2010, 2000, 300
01.04.2010, 2000, 100

Das ist das vereinfachte Postgres-SQL-Statement:
SELECT MIN(sal_date) as sal_date, "100", "200"
FROM crosstab(
'SELECT sal.salary_from, sal.salary_fk_description, sal.salary_value
FROM tbl_salary as sal
WHERE sal.salary_fk_employee = 7470
AND sal.salary_fk_description In (''100'', ''200'')
GROUP BY sal.salary_from, sal.salary_fk_description, sal.salary_value
ORDER BY sal.salary_from',
'SELECT distinct salary_fk_description
FROM tbl_salary
WHERE tbl_salary.salary_fk_description In (''100'', ''200'')
ORDER BY salary_fk_description')
AS (sal_date timestamp, "100" numeric, "200" numeric)
GROUP BY "100", "200"
ORDER BY sal_date;

Crosstab ist die Kreuztablle in PG

Vereinfacht:
SELECT MIN(sal_date) as sal_date, "100", "200"
FROM Kreuztabelle
GROUP BY "100", "200"
ORDER BY sal_date;

Leider bekomme ich so nur die ersten beiden Ergebis-Zeilen geliefert.
Wie kann man feststellen, ob sich gegenüber dem Vormaonat was ge-
àndert hat auch wenn das Ergebnis früher schon mal da war?

Kann man das per SQL lösen?

Danke für's Nachdenken.

Ähnliche fragen