SQL Aufgabe die ich grad nich wirklich lösen kann

mcburn83

Lieutenant
Registriert
Jan. 2006
Beiträge
524
Hi ich bearbeite grad nen SQL Aufgabenzettel und komm bei einer Aufgabe nicht weiter, ich poste sie einfach mal:

Listen Sie alle Artikel mit ihrem aktuellen (Stand: 20.11.2009) Einzelpreis und dem Datum für die letzte Preisänderung auf. Sortieren Sie die Liste absteigend nach Einzelpreis und dem Datum für die letzte Preisänderung auf. Geben Sie die Preise zusätzlich noch in US-$ aus (Kurs: 1,4984 $ = 1 €).

Und hier noch die Datenbank:
Code:
CREATE TABLE Kunde(
       Knr NUMBER(3) NOT NULL,
       KName VARCHAR2(20),
       Saldo NUMBER(7,2),
       Kredit NUMBER(7,2),
       CONSTRAINT XPK_Kunde PRIMARY KEY (Knr)
);

CREATE TABLE Verkaeufer(
       VkNr Number(3) NOT NULL,
       VkName VARCHAR2(30),
       Prov Number(7,2),
       CONSTRAINT XPK_Verkaeufer PRIMARY KEY (VkNr)
);

CREATE TABLE Bestellung(
       BeNr Number(5) NOT NULL,
       Datum DATE,
       VkNr Number(3) REFERENCES Verkaeufer ON DELETE CASCADE,
       Knr NUMBER(3) REFERENCES Kunde  ON DELETE CASCADE,
       CONSTRAINT XPK_Bestellung PRIMARY KEY(BeNr)  
);

CREATE TABLE Artikel(
       TeilNr VARCHAR2(4) NOT NULL,
       TName VARCHAR2(30),
       Vorrat Number(4),
       Klasse VARCHAR2(2),
       LagerNr Number(2),
       CONSTRAINT XPK_Artikel PRIMARY KEY (TeilNr)
);

CREATE TABLE Bestellliste(
       BeNr Number(5) REFERENCES Bestellung ON DELETE CASCADE,
       TeilNr VARCHAR2(4) REFERENCES Artikel ON DELETE CASCADE,
       Anzahl Number(3),
       VPreis Number(20,2),
       CONSTRAINT XPK_Bestellliste PRIMARY KEY (BeNr,TeilNr)
);

CREATE TABLE Preis(
       TeilNr VARCHAR2(4) REFERENCES Artikel ON DELETE CASCADE,
       GueltigAb DATE,
       Epreis Number(20,2),
       CONSTRAINT XPK_Preis PRIMARY KEY (TeilNr,GueltigAb)
);


Vielleicht kann mir ja irgendwer weiterhelfen :-) ich probier aber jetzt auch noch weiter aus, falls ich es doch hinbekomm schreib ich auch die lösung ;)
 
Also wenn du das hier schon als Hausaufgaben-Forum missbrauchst, könntest du ja wenigstens deine Ansätze schon mal posten...
 
Hi,

beim nächsten mal bitte noch folgendes angeben:
1. Welche Sql Version
2. Den SQL Script denn Du bisher hast
3. Wo genau dein Problem liegt.

aber hier schonmal die Lösung für MS-SQL. ;)

SELECT Artikel.TeilNr, Preis.[Epreis Number], Preis.[Epreis Number] * 1.4984 AS [US-$], Preis.GueltigAb
FROM Preis RIGHT OUTER JOIN
Artikel ON Preis.TeilNr = Artikel.TeilNr
ORDER BY Preis.[Epreis Number] DESC, Preis.GueltigAb DESC

ups seh grad der Lehrer war doch nicht so gemein, in der Tabelle Preis lautet die Spalte ja nur Epreis. Dann lautet das ganze so:

SELECT Artikel.TeilNr, Preis.Epreis, Preis.Epreis * 1.4984 AS [US-$], Preis.GueltigAb
FROM Preis RIGHT OUTER JOIN
Artikel ON Preis.TeilNr = Artikel.TeilNr
ORDER BY Preis.Epreis DESC, Preis.GueltigAb DESC
 
Zuletzt bearbeitet:
Jo danke :) ich benutz Oracle iSQL*Plus

und hab bisher das hier:

SELECT * FROM ARTIKEL A, PREIS B WHERE (B.GueltigAb <= '20.Nov.2009') AND (B.GueltigAb ;

ich häng halt grad beim auslesen des letzten datums, ich mach einfach eins nach dem anderen ;D

//geb ich nur an damit ich die tabellen sehe.
SELECT * FROM ARTIKEL;
SELECT GueltigAb, Epreis FROM PREIS;



aber vielen dank schonmal, ich nehm mir mal deins hier vor uns versuch das mal ein wenig zu drehen, das mag der so nicht :( bekomm folgende nachricht:
ERROR at line 1:
ORA-01747: invalid user.table.column, table.column, or column specification

bei deinem edit kommt der fehler:
SELECT Artikel.TeilNr, Preis.Epreis, Preis.Epreis * 1.4984 AS [US-$], Preis.GueltigAb
*

ERROR at line 1:
ORA-00923: FROM keyword not found where expected

:D aber ich glaub so mehr oder weniger hab ich das prinzip kapiert ich versuchs mal etwas umzubauen
Ergänzung ()

Okay vielen dank hat mir sehr geholfen :D habs nochmal umgebaut etwas herauskam das hier:
Code:
SELECT A.TeilNr, P.Epreis, P.Epreis * 1.4984 AS USDOLLAR, P.GueltigAb
FROM PREIS P RIGHT OUTER JOIN
ARTIKEL A ON P.TeilNr = A.TeilNr
ORDER BY P.Epreis DESC, P.GueltigAb DESC;
Ergänzung ()

nun hab ich noch etwas eingefügt und mir ist aufgefallen das alle preisänderungen einbezogen werden und nicht nur die letzte also aktuellste

das hab ich bislang:

Code:
SELECT A.TeilNr, P.Epreis, P.Epreis * 1.4984 AS USDOLLAR, P.GueltigAb
FROM PREIS P RIGHT OUTER JOIN
ARTIKEL A ON P.TeilNr = A.TeilNr
WHERE (P.GueltigAb <= '20.NOV.2009')
ORDER BY P.Epreis DESC, P.GueltigAb DESC;
 
Zuletzt bearbeitet:
So, hier noch eine Hilfe Stellung:

Wenn alle TeilNr ausgeben werden sollen die es gibt, auch wenn es keine Preise gibt.

SELECT A.TeilNr, Epreis, Epreis * 1.4984 AS USDOLLAR, GueltigAb
FROM Artikel AS A Left Join Preis AS P ON P.TeilNr = A.TeilNr
WHERE P.GueltigAB is null or
P.GueltigAb = ( SELECT MAX(GueltigAb) AS GueltigAb
FROM Preis AS P
WHERE P.TeilNr = A.TeilNr
GROUP BY TeilNr)


Nur die TeilNr welche einen Preis hinterlegt haben

SELECT A.TeilNr, Epreis, Epreis * 1.4984 AS USDOLLAR, GueltigAb
FROM Artikel AS A Left Join Preis AS P ON P.TeilNr = A.TeilNr
WHERE P.GueltigAb = ( SELECT MAX(GueltigAb) AS GueltigAb
FROM Preis AS P
WHERE P.TeilNr = A.TeilNr
GROUP BY TeilNr)
 
vielen dank ich glaub ich hab das nun richtig die group funktion kannte ich nicht mit dem max befehl hab ich die ganze zeit rumprobiert aber immer nur ein datum bekommen ;D

nun hab ich das so und es läuft:
Code:
SELECT A.TeilNr, Epreis, Epreis * 1.4984 AS USDOLLAR, GueltigAb
FROM ARTIKEL A LEFT JOIN PREIS P ON P.TeilNr = A.TeilNr
WHERE P.GueltigAb = (SELECT MAX(GueltigAb)FROM PREIS P
WHERE P.TeilNr = A.TeilNr  AND (P.GueltigAb <= '20.Nov.2009')
GROUP BY A.TeilNr)
ORDER BY P.Epreis DESC, P.GueltigAb DESC;

vielen dank =)
 
Moin, ich wollt dafür nun nicht einen neuen Thread aufmachen. hab wieder ein Problem beim orcaln ;D

Also hier die Aufgabe:

Listen Sie die verkauften Artikel (TeilNr, Umsatz und verkaufte Stückzahl) nach Umsatz sortiert auf (Umsatz ist die Erlössumme, also die Summe der Verkaufspreise; Bestellliste.VPreis be-zeichnet den Einzelpreis des bestellten Artikels).

Das hab ich schon:
Code:
SELECT TeilNr, SUM(VPREIS * ANZAHL) AS UMSATZ
FROM BESTELLLISTE
GROUP BY TeilNr
ORDER BY UMSATZ DESC;

Ausgegeben wird nun schon mehr oder weniger das richtige, nur weil ich die Group by Funktion benutz, mag der die Anzahl nicht mit ausgeben sprich das hier:

Code:
SELECT TeilNr, SUM(VPREIS * ANZAHL) AS UMSATZ, ANZAHL
FROM BESTELLLISTE
GROUP BY TeilNr
ORDER BY UMSATZ DESC;

geht nicht. Ich wäre sehr dankbar wenn mir wer weiterhelfen würde.



naja okay, war einfacher als ich dachte habs dann doch noch einmal mit ausprobieren hinbekommen.

Code:
SELECT TeilNr, SUM(VPREIS * ANZAHL) AS UMSATZ, SUM ANZAHL
FROM BESTELLLISTE
GROUP BY TeilNr
ORDER BY UMSATZ DESC;
 
Zuletzt bearbeitet:
Zurück
Oben