1. März 200916 j 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?
1. März 200916 j schaut dir mal die group by-Klausel an. Und dann machst ein group by kunde mit sum(preis). Bearbeitet 1. März 200916 j von VaNaTiC
1. März 200916 j 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!!!
1. März 200916 j 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
1. März 200916 j 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?
1. März 200916 j Indem Du die Spalte eben noch ins GROUP BY aufnimmst. Alle Spalten, die nicht in einer Aggregatsfunktion sind, müssen ins GROUP BY. Dim
1. März 200916 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.