Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Paradox DB: YEAR-Funktion geht nicht

  Alt 14. Jul 2006, 08:37
In Access werden unorthodoxe Bezeichner in eckige Klammern verpackt, die BDE verlangt Quotes erlaubt keine Leerstellen in Korrelationsnamen. Die Datumsangaben machst du sicherer per Parameter und auf jeden Fall nicht so wie in Access. Habe es nicht getestet, aber vielleicht sind so weniger Syntaxfehler im Statement:

SQL-Code:
SELECT DISTINCT MAX(ks.Stichtag) AS MaxvonStichtag, SUM(ks.Umsatz) AS UmsatzSumme
FROM Konten k
LEFT JOIN Konto_Stand ks ON k.LftNr = ks.LftNr_Konto
WHERE k.Kunden_Nr = :kunden_nr AND ks.Stichtag < :stichtag
GROUP BY EXTRACT(YEAR FROM ks.Stichtag)
ORDER BY MAX(ks.Stichtag)
Überprüfen müsste man noch, ob die Bedingung "kleiner" in der WHERE-Klausel nicht "kleiner oder gleich" sein müsste, welchen Effekt DISTINCT bei deiner Abfrage hat und ob du wirklich einen OUTER JOIN brauchst.

Nachtrag: Wenn du nach Jahren gruppieren möchtest, dann sollte das Jahr auch in der Spaltenauswahl auftauchen.

Noch ein Nachtrag: Die BDE lässt in der GROUP BY-Klausel nur "echte", keine "berechneten" Spalten zu. Du wirst da mit einer BDE-View arbeiten müssen:

SQL-Code:
/* ksview.sql */
SELECT LftNr_Konto, Stichtag, Umsatz, EXTRACT(YEAR FROM Stichtag) as Jahr
FROM Konto_Stand
Danach sollte das hier funktionieren:

SQL-Code:
SELECT ks.Jahr, MAX(ks.Stichtag) AS Stichtag, SUM(ks.Umsatz) AS Umsatz
FROM Konten k
LEFT JOIN "ksview.sql" ks ON k.LftNr = ks.LftNr_Konto
WHERE k.Kunden_Nr = :kunden_nr AND ks.stichtag < :stichtag
GROUP BY jahr
ORDER BY jahr
Übrigens würde sich dein Thema unter der Rubrik Datenbanken wohler fühlen. Wenn LftNr als Abkürzung für Lauf-Ente Nr steht, dann hoffe ich für dich, dass kein Tierschützer mitliest.

marabu
  Mit Zitat antworten Zitat