Für diese Übung werden die Daten von shop.sql benötigt.
1. Abfrage
Ausgabe BESTELLNR, VORNAME, NACHNAME, RABATT
select B.BESTELLNR, K.VORNAME, K.NACHNAME, nvl(G.RABATT, '0') as RABATT
from BESTELLUNG B
join KUNDE K on B.KUNDENNR = K.KUNDENNR
left join GUTSCHEIN G on B.GUTSCHEINNR = G.GUTSCHEINNR;
2. Abfrage
Ermitteln SIe den Verkaufswert aller bisher erledigten Bestellungen (Status = "E"). Eingelöste Gutscheine können hier ignoriert werden. Die VKB Preise sind netto → Umsatzsteuer addieren
select BESTELLNR, ERLOS
from BESTELLUNG BS
inner join (
select BESTELLNR BST, round(sum(B.ANZAHL * (VKPREIS * (1+ UMSATZSTEUER / 100))), 2) || '€' as ERLOS
from BESTELLPOS B
inner join ARTIKEL A on B.ARTIKELNR = A.ARTIKELNR
group by BESTELLNR) on BST = BS.BESTELLNR;
Solution from Teacher
select sum(BS.ANZAHL * A.VKPREIS * (1 + A.UMSATZSTEUER / 100))
from BESTELLPOS BS
join ARTIKEL A on BS.ARTIKELNR = A.ARTIKELNR
join BESTELLUNG B on B.BESTELLNR = BS.BESTELLNR
where B.STATUS = 'E';
3. Abfrage
Erstellen Sie eine Liste aller Artikel und sortieren Sie diese absteigend nach Verkaufszahl. Es sollen nur erledigte Bestellungen berücksichtigt werden
ARTIKELNR, BEZEICHUNG, ANZAHL
select ARTIKELNR, A.BEZEICHNUNG, sum(ANZAHL) as ANZAHL
from ARTIKEL A
left join BESTELLPOS BSP using (ARTIKELNR)
left join BESTELLUNG B using (BESTELLNR)
where STATUS = 'E'
group by ARTIKELNR, A.BEZEICHNUNG
order by ARTIKELNR, BEZEICHNUNG
/* something is wrong, trying again next week */
4. Abfrage
Erzeugen Sie eine vollständige Artikelliste und geben Sie den jeweils erwirtschafteten Gewinn (Netto) aus. Gutscheine
können ignoriert werden!
Sortierung absteigend nach Gewinn
select ARTIKEL.ARTIKELNR as "ArtikelNr", BEZEICHNUNG,
to_char(sum((VKPREIS - ARTIKEL.EKPREIS) * ANZAHL), '9999.99') as "Gewinn"
from ARTIKEL
join BESTELLPOS B on ARTIKEL.ARTIKELNR = B.ARTIKELNR
group by ARTIKEL.ARTIKELNR, BEZEICHNUNG
order by 3 desc;
5. Abfrage
select sum((A2.VKPREIS * BESTELLPOS.ANZAHL) * (1 + (UMSATZSTEUER / 100)) * (1 - nvl(G.RABATT, 0)/100)) "Umsatz", LAND from BESTELLPOS
inner join BESTELLUNG B on BESTELLPOS.BESTELLNR = B.BESTELLNR
inner join KUNDE K on B.KUNDENNR = K.KUNDENNR
inner join ARTIKEL A2 on BESTELLPOS.ARTIKELNR = A2.ARTIKELNR
left join GUTSCHEIN G on B.GUTSCHEINNR = G.GUTSCHEINNR
group by LAND;
Solution from the teacher
select to_char(round(sum((VKPREIS * BESTELLPOS.ANZAHL) * (1 + (UMSATZSTEUER / 100))
* (1 - (nvl(GUTSCHEIN.RABATT, 0) / 100))), 2), '9999.99') "Umsatz", LAND
from BESTELLPOS
join ARTIKEL using (ARTIKELNR)
join BESTELLUNG using (BESTELLNR)
left join GUTSCHEIN using (GUTSCHEINNR)
join KUNDE using (KUNDENNR)
group by KUNDE.LAND