m.anja Geschrieben 1. März 2009 Geschrieben 1. März 2009 Hallo, ich beschäftige mich schon seit längerem mit PL/SQL, komme aber nicht auf die LÖsung folgender Problemstellung: Ich habe eine Tabelle mit folgenden Daten: Kunde A, gekaufter Artikel x, Preis 1 Kunde A, gekaufter Artikel Y, Preis 2 Kunde B, gekaufter Artikel Z, Preis 3 ..... Jetzt würde ich gerne eine Abfrage so gestalten, dass pro Kunde der gesamte Umsatz ausgegeben wird. Das Ergebnis sollte dann in etwa so aussehen: Kunde A hat einen Umsatz von xxx Euro Kunde B hat einen Umsatz von xxx Euro ..... Die Abfrage für einen einzelnen Kunden ist kein Problem, aber ich schaffe es einfach nicht für alle Kunden gleichzeitig...... Wer hat einen Tip?
VaNaTiC Geschrieben 1. März 2009 Geschrieben 1. März 2009 (bearbeitet) schaut dir mal die group by-Klausel an. Und dann machst ein group by kunde mit sum(preis). Bearbeitet 1. März 2009 von VaNaTiC
m.anja Geschrieben 1. März 2009 Autor Geschrieben 1. März 2009 Vielen Dank, genau das wars! Ich hab einfach zu kompliziert gedacht......:upps
m.anja Geschrieben 1. März 2009 Autor Geschrieben 1. März 2009 also so ganz krieg ich das immer noch nicht hin! Mit folgendem Ausdruck klappt des ganze einfach nicht. Mein SQL-Developper meint dann: Komponente 'Preis' muss deklariert werden. create or replace PROCEDURE KLAUSUR_1B AS Cursor kunde_cursor IS SELECT k.vorname, sum(l.preis) FROM (kunde k inner join download d on k.kundennummer =d.kundennummer) inner join lied l on d.liednummer = l.liednummer GROUP BY k.vorname; BEGIN For kunde_record IN kunde_cursor LOOP dbms_output.put_line('Name: '||kunde_record.vorname||' Umsatz: '||kunde_record.preis); END LOOP; END; Wo liegt der Fehler??? Vielen DAnk schon mal!!!
dr.dimitri Geschrieben 1. März 2009 Geschrieben 1. März 2009 Wo liegt der Fehler??? Die Spalte heißt nicht mehr Preis, sondern sum(l.preis) (siehst Du auch, wenn Du das SQL einfach mal so ausführst). Um das zu ändern, vergibst Du einfach einen Spaltenalias: SELECT k.vorname, sum(l.preis) [b]AS preis[/b] Dim
m.anja Geschrieben 1. März 2009 Autor Geschrieben 1. März 2009 Vielen vielen Dank, das hat geholfen! Nur noch eine Frage: Wenn ich jetzt in der SELECT-Anweisung zusätzlich den Nachnamen abfrage also SELECT [B]k.nachname[/B], k.vorname, sum(l.preis) as preis kommt die Fehlermeldung "Kein Group-BY Ausdruck". Wie kann ich das lösen?
dr.dimitri Geschrieben 1. März 2009 Geschrieben 1. März 2009 Indem Du die Spalte eben noch ins GROUP BY aufnimmst. Alle Spalten, die nicht in einer Aggregatsfunktion sind, müssen ins GROUP BY. Dim
m.anja Geschrieben 1. März 2009 Autor Geschrieben 1. März 2009 ahh, ok - ist ja auch irgendwo logisch Danke!!!
VaNaTiC Geschrieben 1. März 2009 Geschrieben 1. März 2009 Um genau Dein Beispiel aufzugreifen finde ich, solltest Du ein group by kundennummer machen. Vornamen sind öfters identisch und auch Nachnamen reichen nicht zweifelsfrei. Für die Funktionsweise ist das egal, nur die Ergebnismenge kann sich u.U. ändern
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden