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