m.anja Geschrieben 1. März 2009 Teilen 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
VaNaTiC Geschrieben 1. März 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
m.anja Geschrieben 1. März 2009 Autor Teilen Geschrieben 1. März 2009 Vielen Dank, genau das wars! Ich hab einfach zu kompliziert gedacht......:upps Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
m.anja Geschrieben 1. März 2009 Autor Teilen 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!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 1. März 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
m.anja Geschrieben 1. März 2009 Autor Teilen 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? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 1. März 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
m.anja Geschrieben 1. März 2009 Autor Teilen Geschrieben 1. März 2009 ahh, ok - ist ja auch irgendwo logisch Danke!!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
VaNaTiC Geschrieben 1. März 2009 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.