Hallo,
ich möchte aus einer ADS-Datenbank Werte ermitteln. Dazu habe ich zwei
SQL-Anweisungen erstellt, die auch das entsprechende Ergebnis bringen. Beide
SQL-Anweisungen unterscheiden sich nur in der WHERE-Klausel.
SQL 1:
SQL-Code:
SELECT MONTH(z.Datum) AS Monat
, SUM(CASE WHEN ((a.Art = 1) OR
(a.Art = 2) OR
((a.AuftragNr = 'KLA') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeEZKA
, SUM(CASE WHEN (a.Art = 3)
THEN z.ZeitBer
ELSE 0
END) AS SummeHW
, SUM(CASE WHEN ((a.AuftragNr = 'NVZ') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeNVZ
FROM Zeit z
, Auftrag a
WHERE (z.AuftragsID = a.ID) AND
(YEAR(z.Datum) = :ParamJahr) AND
(ISNULL(a.Praemie, 0) >= 0) AND
(:ParamPraemie = 1)
GROUP BY Monat
ORDER BY Monat
SQL 2:
SQL-Code:
SELECT MONTH(z.Datum) AS Monat
, SUM(CASE WHEN ((a.Art = 1) OR
(a.Art = 2) OR
((a.AuftragNr = 'KLA') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeEZKA
, SUM(CASE WHEN (a.Art = 3)
THEN z.ZeitBer
ELSE 0
END) AS SummeHW
, SUM(CASE WHEN ((a.AuftragNr = 'NVZ') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeNVZ
FROM Zeit z
, Auftrag a
WHERE (z.AuftragsID = a.ID) AND
(YEAR(z.Datum) = :ParamJahr) AND
(ISNULL(a.Praemie, 0) = 0) AND
(:ParamPraemie = 0)
GROUP BY Monat
ORDER BY Monat
Da immer nur eine
SQL-Anweisung Werte liefern kann, wollte ich alles in eine große
SQL-Anweisung mittels UNIONS zusammenfügen.
SQL-Code:
SELECT MONTH(z.Datum) AS Monat
, SUM(CASE WHEN ((a.Art = 1) OR
(a.Art = 2) OR
((a.AuftragNr = 'KLA') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeEZKA
, SUM(CASE WHEN (a.Art = 3)
THEN z.ZeitBer
ELSE 0
END) AS SummeHW
, SUM(CASE WHEN ((a.AuftragNr = 'NVZ') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeNVZ
FROM Zeit z
, Auftrag a
WHERE (z.AuftragsID = a.ID) AND
(YEAR(z.Datum) = :ParamJahr) AND
(ISNULL(a.Praemie, 0) >= 0) AND
(:ParamPraemie = 1)
UNION
SELECT MONTH(z.Datum) AS Monat
, SUM(CASE WHEN ((a.Art = 1) OR
(a.Art = 2) OR
((a.AuftragNr = 'KLA') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeEZKA
, SUM(CASE WHEN (a.Art = 3)
THEN z.ZeitBer
ELSE 0
END) AS SummeHW
, SUM(CASE WHEN ((a.AuftragNr = 'NVZ') AND
(YEAR(a.ErfassDatum) = :ParamJahr)
)
THEN z.ZeitBer
ELSE 0
END) AS SummeNVZ
FROM Zeit z
, Auftrag a
WHERE (z.AuftragsID = a.ID) AND
(YEAR(z.Datum) = :ParamJahr) AND
(ISNULL(a.Praemie, 0) = 0) AND
(:ParamPraemie = 0)
GROUP BY Monat
ORDER BY Monat
Nun bekomme ich aber folgenden Fehler:
poQuery: Error 7200; AQE Error: State = HY000; NativeError = 2196;
[Extended Systems][Advantage
SQL Engine]
Column not found in GROUP BY clause: Datum in SELECT or HAVING clause.
Auch das Ersetzen von 'Monat' mit 'MONTH(z.Datum)' in der GROUP-Klausel und das Hinzufügen der anderen Spalten bringt keine anderen Ergebnisse. Es wäre schön, wenn mir jemand einen Lösungsansatz geben könnte, damit ich das Thema noch fertig machen kann.
Mike