Sql query's wie wil me helpen

Status
Niet open voor verdere reacties.

xpsje

Gebruiker
Lid geworden
19 mei 2008
Berichten
9
Hallo allemaal,

Heb een klein probleempje. Ik weet niet hoe ik een query moet schrijven om bepaalde gegevens uit tabellen te halen. Wie zou mij aub kunnen helpen? Zie hieronder.

Tabel klant:

klantnr
klantnaam
klantplaats

tabel bestelling:

bestelnr
klantnr
besteldatum

tabel artikel:

artikelcode
artikelnaam
voorraad

tabel besteldartikel:

bestelnr
artikelcode
aantal

-Geef de artikelcode van alle artikelen en het totale aantal dat er van besteld is. Als een artikel nog nooit besteld is, moet er uiteraard 0 verschijnen.

-Geef een overzicht van alle bestelde artikelen, waarbij per artikel de artikelcode en het totale aantal dat er van besteld is wordt vermeld.

-Geef klantnr en klantnaam van alle klanten die in 1999 meer dan 5 bestellingen hebben gedaan.

-Geef het aantal klanten dat in 1999 meer dan 5 bestellingen heeft gedaan.
 
Wat had je zelf allemaal al geprobeerd en gemaakt aan query's?

Het lijkt namelijk erg veel op een schoolopdracht wat met een aantal SELECT,FROM,WHERE statements prima te doen moet zijn

Het is een beetje jammer dat ik de database er niet van heb. Anders kon ik het gewoon lekker proberen.

Ik kom niet verder dan SELECT artikelcode, aantal FROM artikel JOIN besteldartikel
 
-Geef klantnr en klantnaam van alle klanten die in 1999 meer dan 5 bestellingen hebben gedaan.

Kijk ik zou dan doen:

Select klantnr, klantnaam
From klant
where...(select besteldatum
From bestelling
Where......)

Kan iemand me aub helpen? Hoe geef ik aan dat hij selecteert welk klantnr en klantnaam meer dan 5 bestellingen na 1999 heeft gedaan? En hoe selecteer ik het aantal klanten dat meer dan 5 bestellingen heeft gedaan in 1999
 
Laatst bewerkt:
Bedankt, maar ik heb dat allang doorgenomen. begrijp het gewoon niet.
 
Tabel klant:

klantnr
klantnaam
klantplaats

tabel bestelling:

bestelnr
klantnr
besteldatum

tabel artikel:

artikelcode
artikelnaam
voorraad

tabel besteldartikel:

bestelnr
artikelcode
aantal

-Geef klantnr en klantnaam van alle klanten die in 1999 meer dan 5 bestellingen hebben gedaan.

Vooruit dan :p. Je moet nu gegevens van meerdere tabellen opvragen en met elkaar vergelijken. We bouwen de query in stappen op en voegen dan alles samen.

Het vinden van de klantnummers van mensen die überhaupt bestellingen hebben gedaan in 1999 op zich is niet zo moeilijk:

Code:
SELECT klantnr
FROM bestelling
WHERE RIGHT(besteldatum,4) = 1999

Die tweede regel geldt wanneer de datum wordt opgeslagen met het jaartal yyyy aan het eind; aanpassen naar eigen inzicht. Anyway, willen we uitfilteren wie toen ook meer dan vijf bestellingen heeft gedaan, dan komen GROUP BY / HAVING en COUNT er bij:

Code:
SELECT klantnr
FROM bestelling
WHERE RIGHT(besteldatum,4) = 1999
GROUP BY klantnr
HAVING COUNT(*) > 5

De resultaten worden dus in groepjes van bestellingen met hetzelfde klantnummer afgehandeld, en steeds wordt geteld of zo'n groepje meer dan vijf items bevat.

Nu willen we daarbij ook nog de klantnaam hebben, en dat staat in een andere tabel. Maar we krijgen uit bovenstaande query keurig een lijst met klantnummers, dus nemen we die ernaast en gaan we de klantnummers matchen met behulp van IN:

Code:
SELECT klantnr, klantnaam
FROM klant
WHERE klantnr
IN
(
SELECT klantnr
FROM bestelling
WHERE RIGHT(besteldatum,4) = 1999
GROUP BY klantnr
HAVING COUNT(*) > 5
)

Zo'n query tussen haakjes heet een subquery. Het resultaat daarvan wordt aan de hoofdquery "gevoerd" als zijnde een tabel.

Nu jij :p
 
dankje waardeer ik echt!

Nu ben ik zegmaar de eerste aan het doen:

Geef de artikelcode van alle artikelen en het totale aantal dat er van besteld is. Als een artikel nog nooit besteld is, moet er uiteraard 0 verschijnen.

En heb ik dit:

select artikel.artikelcode, aantal
from artikel, besteldartikel
where artikel.artikelcode=besteldartikel.artikelcode

OF

select artikel.artikelcode, besteldartikel.aantal, bestelling.bestelnr
from artikel, besteldartikel, bestelling
where artikel.artikelcode=besteldartikel.artikelcode

Ja nu weet ik niet hoe ik precies 3 tables moet joinen......
 
waarom trouwens WHERE RIGHT(besteldatum,4) = 1999

stel je hebt de datum opgeslagen in het formaat DD-MM-JJJJ dan pakt hij hier alleen de 4 posities vanaf rechts gerekend.

heb je bijvoorbeeld dd-mm-jj als masker kun je ook WHERE RIGHT(besteldatum,2) = 99 gebruiken
 
is dit het een beetje???

vraag 1a: SELECT A.ARTIKELCODE, A.ARTIKELNAAM, SUM(B.AANTAL) as AANTAL
FROM ARTIKEL A, BESTELDARTIKEL B
WHERE A.ARTIKELCODE = B.ARTIKELCODE

vraag 1b: SELECT A.ARTIKELCODE, A.ARTIKELNAAM, SUM(B.AANTAL) as AANTAL
FROM ARTIKEL A, BESTELDARTIKEL B
WHERE A.ARTIKELCODE = B.ARTIKELCODE
 
Hallo allemaal,

-Geef de artikelcode van alle artikelen en het totale aantal dat er van besteld is. Als een artikel nog nooit besteld is, moet er uiteraard 0 verschijnen.

Code:
SELECT artikel.artikelcode, SUM(besteldartikel.artikelcode) AS aantalbestellingen
FROM artikel
LEFT OUTER JOIN besteldartikel ON artikel.artikelcode = besteldartikel.artikelcode
GROUP BY artikel.artikelcode

Hallo allemaal,

-Geef een overzicht van alle bestelde artikelen, waarbij per artikel de artikelcode en het totale aantal dat er van besteld is wordt vermeld.

Code:
SELECT artikel.artikelcode, SUM(besteldartikel.artikelcode) AS aantalbestellingen
FROM artikel
INNER JOIN besteldartikel ON artikel.artikelcode = besteldartikel.artikelcode
GROUP BY artikel.artikelcode

Hallo allemaal,

-Geef klantnr en klantnaam van alle klanten die in 1999 meer dan 5 bestellingen hebben gedaan.

Code:
SELECT klant.klantnr, klant.klantnaam
FROM klant
INNER JOIN bestelling ON klant.klantnr = bestelling.klantnr
WHERE YEAR(bestelling.besteldatum) = 1999
GROUP BY klant.klantnr, klant.klantnaam
HAVING count(*) > 5

Hallo allemaal,

-Geef het aantal klanten dat in 1999 meer dan 5 bestellingen heeft gedaan.

Code:
SELECT COUNT(*) AS aantalklanten
FROM
(
       SELECT klant.klantnr, klant.klantnaam
       FROM klant
       INNER JOIN bestelling ON klant.klantnr = bestelling.klantnr
       WHERE YEAR(bestelling.besteldatum) = 1999
       GROUP BY klant.klantnr, klant.klantnaam
       HAVING count(*) > 5

)

Dit zou het moeten zijn
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan