Gruppieren nach Jahren und Monaten

Caliterra

Erfahrenes Mitglied
Gruppieren nach Jahren und Monaten (DB2)

Hallo,
ich habe folgendes Problem, ich möchte die Spalte "bearb_erst" (DATUM: YYYY-MM-DD)
gruppiern nach Monaten. Aber irgendwie finde ich nicht den richtigen Ansatz.
Die Datenbank ist eine DB2 von IBM.

Code:
SELECT YEAR(bearb_erst)AS "JAHR", MONTH(bearb_erst) AS "MONAT", COUNT(nael_nr) AS "ANZAHL"
FROM xxxxxx
WHERE bearb_erst BETWEEN '2004-09-01' AND '2005-06-30'
GROUP BY MONTH(bearb_erst)
FETCH FIRST 100 ROWS ONLY

Ich hoffe jemand kann mir helfen.
 
Zuletzt bearbeitet:
Vermutlich solltest Du nach
JAHR + MONAT gruppieren, wenn Du nicht alle Januar-Einträge aus allen Jahren haben möchtest.

Also etwa
Group By YEAR(bearb_erst), MONTH(bearb_erst)

vop
 
Re: Gruppieren nach Jahren und Monaten (DB2)

Ja, da gebe ich Dir recht. Aber leider bekomme ich immer die folgende Fehlermeldung

Code:
Fehler:

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver][DB2] SQL0104N An unexpected token
 "(" was found following "". Expected tokens may include: "FOR WITH FETCH ORDER
 UNION EXCEPT QUERYNO OPTIMIZE ". SQLSTATE=42601

?
 
Zuletzt bearbeitet:
Sieht aus, als würde die Funktion Year oder Month nicht bekannt sein!?

Bin kein DB2 - Experte. Hast Du kein DB2-Manual?

vop
 
Re: Gruppieren nach Jahren und Monaten (DB2)

Leider hab ich ne Menge Manuals, aber keines dieser Handbücher behandelt ausführlich
dieses Thema. Vielleicht bin ich ja nur blind und finde nichts.

Hab auch schon gegoogelt wie ein blöder. :confused: :confused: .
 
Re: Gruppieren nach Jahren und Monaten (DB")

Tja, ich habe es noch mal versucht aber ich bekomme immer ne Fehlermeldung.
Laut den Handbüchern und Foren die ich durchsucht habe müsste das SQL passen.


--ERROR: ===========================================================================================
--ERROR: SQLState = 42601
--ERROR: StopProcessing = true
--ERROR: VendorCode = -104
--ERROR: [IBM][CLI Driver][DB2] SQL0104N An unexpected token "(" was found following "". Expected
--ERROR: tokens may include: "FOR WITH FETCH ORDER UNION EXCEPT QUERYNO OPTIMIZE ". SQLSTATE=42601
--ERROR: ===========================================================================================
SELECT YEAR(bearb_erst) AS "JAHR", MONTH(bearb_erst) AS "MONAT", COUNT(nael_nr) AS "Anzahl NAELs"
FROM xxxxxxx
WHERE bearb_erst BETWEEN '2004-09-01' AND '2005-06-30'
GROUP BY YEAR(bearb_erst), MONTH(bearb_erst)
FETCH FIRST 100 ROWS ONLY


Zu diesem Thema entnahm ich dem Fehlernachrichten, Band 2 folgendes:

SQL0104N Auf “<text>” folgte das unerwartete Token “<token>”. Zu den möglichen Token gehören: “<token-liste>”.

Erläuterung: Bei dem Token, das auf “<text>”
folgt, wurde ein Syntaxfehler in der SQL-Anweisung
entdeckt. Das Feld “<text>” umfaßt
die 20 Zeichen der SQL-Anweisung, die dem
ungültigen Token unmittelbar vorangehen.

Als Hilfestellung für Programmierer wird im
Feld SQLERRM des SQL-Kommunikationsbereichs
(SQLCA) eine Liste
möglicher Token “<token-liste>” angezeigt. Bei
der Zusammenstellung dieser Liste wird davon
ausgegangen, daß die Anweisung bis zum angegebenen
Punkt korrekt ist.

Die Anweisung kann nicht verarbeitet werden.

Benutzeraktion: Überprüfen Sie die Anweisung
im Bereich des ungültigen Token, und korrigieren
Sie sie.

sqlcode& -104
sqlstate: 42601


Was mich aber auch nicht vorran treibt.

Ach so: Falls noch jemand Handbücher sucht zu DB2: http://www.uni-kassel.de/hrz/manuals/db2/#De
 
Re: Gruppieren nach Jahren und Monaten (DB")

Na das einzige Schlüsselwort, dass sowohl in der Liste der möglichen Tokens und dem Statement auftaucht ist "FETCH". Hast Du mal die letzte Zeile mit dem Fetch weggelassen?

Nur 'ne Idee ohne dass ich mit der DB2 SQL Syntax auskenne....
 
Ich hab die Lösung. :-) :-)

Aus einem DB2 Forum: Link
Das sollte mit einem nested table select funktionieren:

Code:
 SELECT  JAHR , MONAT , COUNT(nael_nr)  
FROM  
( SELECT YEAR(bearb_erst) as JAHR , MONTH(bearb_erst) as MONAT , nael_nr  
FROM xxxxx
WHERE bearb_erst BETWEEN '2004-09-01' AND '2005-06-30') A
GROUP BY JAHR , MONAT
 

Neue Beiträge

Zurück