Gruppierung, aber nur eine Summe

drzwockel

Benutzer
Beiträge
9
Hallo ins Forum,

ich bin neu hier und hoffe, dass Ihr mit helfen könnt. Ich habe ein Auswerteprogramm in Excel geschrieben, dass seinen Datenbestand aus einer Oracle Datenbank holt. Dies funktioniert bisher einwandfrei.
Die Ergebnisse werden immer gruppiert - summiert dargestellt, so dass für eine Abfragezeile immer summierte Monatswerte ausgegeben werden.

Beispiel:
Abfrage für alle roten Autos aus MS (als Beispiel), dann erfolgt die monatsweise Ausgabe für die Bedingung rote Autos und aus MS
Jan: 10
Feb: 16
Mrz: 17
usw...

In der nächsten Zeile werden dann alle blauen Autos aus MS abgefragt usw.
Jetzt aber zu meinem Problem. Ich muss jetzt Abfragen erstellen, die in einem Parameter einen Schlüssel abfragen, der mit Prozent übergeben werden darf. Dieser Schlüssel ist 16stellig. Die Übergabe könnte dann wie folgt aussehen:
Alle blauen Autos mit dem Schlüssel LIKE '387%'

Im SQL Developer bekomme ich dann meine Summen angezeigt nach dem Muster
Jan: 3871111111111 Wert 2
Jan: 3871231313131 Wert 7
Jan: 3879842342342 Wert 1
Feb: 3875400000090 Wert 2
usw.

Eine solche Ausgabe kann aber mein Auswertetool nicht verarbeiten, sondern die möglichen Schlüssel müssten zusammensummiert als Monatswert ausgebeben werden. Also hier z.Bsp. für Jan. 10 ... usw.
Ich habe von einem Kollegen gehört, dass dies durchaus machbar sein soll (mit einer Pseudospalte).

Jetzt meine Frage/Bitte: Hat jemand eine Lösung/einen Lösungsansatz, wie der SQL-String aufgebaut werden muss?

Vielen Dank,

Gruß vom Doc
 
Werbung:
Es wäre gut, wenn du die zugrundeliegende Abfrage mit posten würdest. Dein SQL Developer müsste ja sowas machen wie
Code:
SELECT Monat,Schlüssel,count(*) AS Anzahl
FROM tabelle
WHERE Schlüssel LIKE '387%'
GROUP BY Monat,Schlüssel
und das könnte man eventuell abändern in
Code:
SELECT Monat,left(Schlüssel,3) AS Schlüssel,count(*) AS Anzahl
FROM tabelle
WHERE Schlüssel LIKE '387%'
GROUP BY Monat,left(Schlüssel,3)
 
Code:
SELECT Monat, listagg(Schlüssel, ',') AS Schlüssel,count(*) AS Anzahl
FROM tabelle
WHERE Schlüssel LIKE '387%'
GROUP BY Monat
Sollte wohl besser sein... Oder ?
 
Hallo an Alle,

vielen Dank für Eure Antworten ... es wurde die Frage nach dem String gestellt, hier ist er (modifiziert):

SELECT
YYYYMM,
AVG(STUNDEN) AS A_STUNDEN,
SCHLUESSEL,
TYP
FROM
MUSTERDATENBANK
WHERE
ORG = '1000'
AND SCHLUESSEL LIKE '387%'
AND TYP = 'PKW'
AND YYYYMM BETWEEN '201400' AND '201412'
GROUP BY
YYYYMM,
SCHLÜSSEL,
TYP
ORDER BY
YYYYMM;

Als Wert soll dann der Stundenwert (AVG) pro YYYYMM herauskommen. Würde der Schlüssel hier eindeutig sein, wäre dies kein Problem. Leider wird diese Abfragemöglichkeit gewünscht :-(.

Ich hoffe, dass es jetzt etwas verständlicher geworden ist.


Gruß vom Doc
 
Code:
Select yyyymm,
       Avg(stunden) As a_stunden,
       listagg(schluessel, ','),
       typ
From   musterdatenbank
Where  org = '1000'
And    schluessel Like '387%'
And    typ = 'PKW'
And    yyyymm Between '201400' And '201412'
Group  By yyyymm,
          typ
Order  By yyyymm;
So sollte das "funktionieren"... Deine Anforderung ist mir immer noch zu schwammig... Willst du denn überhaupt alle Schlüssel angezeigt bekommen ?
 
Hallo Distrilec,

erst einmal vielen Dank für Deine schnelle Hilfe.

Jetzt zu Deiner Frage - eine knappe Antwort: Nein

Es geht bei dieser Abfrage lediglich um das AVG(Stunden) Ergebnis entsprechend der gestellten Bedingungen aus der WHERE Klausel.
Also für Jan: zum Beispiel 100, da ist es egal, welche Schlüssel daran beteiligt waren (sie müssen nur mit 387 ... beginnen oder eben in einer anderen Abfragekonstellation mit einer anderen Schlüsseldarstellung (Bsp.: 4568%).


Gruß vom Doc
 
Hallo Distrlec,

ich bekomme jetzt immer diese Fehlermeldung im SQL-Developer:

ORA-02000: fehlendes WITHIN Schlüsselwort
02000. 00000 - "missing %s keyword"
Fehler in Zeile: 37 Spalte: 30

Bezieht sich auf die Zeile "listagg(...)

Gruß vom Doc
 
Hups.... Ja...

Da hab ich wohl was vergessen :D
Code:
Select yyyymm,
       Avg(stunden) As a_stunden,
       listagg(schluessel, ',') within group (order by schluessel asc),
       typ
From   musterdatenbank
Where  org = '1000'
And    schluessel Like '387%'
And    typ = 'PKW'
And    yyyymm Between '201400' And '201412'
Group  By yyyymm,
          typ
Order  By yyyymm;

Aber da dir die Schlüssel egal sind, kannst du die Spalte auch wegfallen lassen :)
 
Werbung:
Zurück
Oben