[SQL] Teveel rijen als resultaat

Pagina: 1
Acties:
  • 186 views sinds 30-01-2008
  • Reageer

  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
Ghaaallo,

Ik heb de volgende tabellen:
Boekingen b
klantnr - reiscode - boekdatum - vertrekdatum - vertrek - aantal - betaald
Reizen r
reiscode - bestemming - dagen - hotel - prijs - provisie - reisleider

Waarbij reiscode's dus hetzelfde zijn, en aantal in boekingen aantal personen per klant is dat die meeneemt op reis.

En de volgende query:
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT 
SUM(b.aantal) AS deelnemers, 
(SUM(b.aantal) * r.prijs) AS opbrengst,
((SUM(b.aantal) * r.prijs) * r.provisie) AS provisie,
(
(SUM(b.aantal) * r.prijs)
-
((SUM(b.aantal) * r.prijs) * r.provisie)
) AS [netto opbrengst]
FROM boekingen b, reizen r
WHERE b.reiscode = r.reiscode
GROUP BY r.prijs, r.provisie, r.reiscode;


Wat ik wil is totaal aantal deelnemers per reis, totale opbrengst, provisie en netto opbrengst (totale opbrengst - provisie) van alle boekingen. Maar ik krijg 8 rijen terug met resultaten, en ik wil er maar eentje met alle gegevens daarin :{

Kan iemand me helpen, kom echt niet verder. Zodra ik meerdere tabellen betrek in het ophalen van statistische gegevens gaat het mis, wat doe ik fout? Bedankt!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 11:03

Freee!!

Trotse papa van Toon en Len!

Iets zegt me dat je 8 verschillende reizen/reiscodes in je systeem hebt zitten, dus krijg je de gewenste gegevens voor alle 8 verschillende reizen => 8 rijen.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
Mr. Liu schreef op 26 september 2004 @ 19:24:
Iets zegt me dat je 8 verschillende reizen/reiscodes in je systeem hebt zitten, dus krijg je de gewenste gegevens voor alle 8 verschillende reizen => 8 rijen.
Klopt, maar ik wil de gegevens van alle reizen bij elkaar, dus het totaal aantal deelnemers keer de prijs van de reis waar ze voor ingeschreven staan en dan alles bij elkaar opgetelt.

Heb het idee dat het bij de GROUP BY in de mist gaat, maar zou zo niet weten hoe ik dat op los.

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 11:03

Freee!!

Trotse papa van Toon en Len!

CrAzY_R schreef op 26 september 2004 @ 19:25:
[...]

Klopt, maar ik wil de gegevens van alle reizen bij elkaar, dus het totaal aantal deelnemers keer de prijs van de reis waar ze voor ingeschreven staan en dan alles bij elkaar opgetelt.

Heb het idee dat het bij de GROUP BY in de mist gaat, maar zou zo niet weten hoe ik dat op los.
De eenvoudigste methode is een VIEW definieren op basis van wat je al hebt, en dat in een volgend SQL statement weer totaliseren.

EDIT:
Natuurlijk zou je ook eens kunnen proberen om die GROUP BY clausule weg te laten.

[ Voor 9% gewijzigd door Freee!! op 26-09-2004 19:28 ]

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
Mr. Liu schreef op 26 september 2004 @ 19:26:
[...]

De eenvoudigste methode is een VIEW definieren op basis van wat je al hebt, en dat in een volgend SQL statement weer totaliseren.

EDIT:
Natuurlijk zou je ook eens kunnen proberen om die GROUP BY clausule weg te laten.
Zonder GROUP BY krijg ik een foutmelding (dat de eerste rekensom geen deel uitmaakt van een statistische functie). Wil het graag in 1 query oplossen, dat moet toch mogelijk zijn? Gegevens berekenen aan de hand van 2 tabellen in 1 query?

Verwijderd

Wat Mr. Lui Mr. Liu waarschijnlijk bedoelde is om r.reiscode uit de GROUP BY clausule te halen. Je vraagstelling is ook raar, want volgens mij wil je niet deze totalen per reis maar per boeking. Maar misschien begrijp ik je verkeerd ...

Edit:
Sterker nog, wat jij wil kan volgens mij niet, omdat je geen goede sleutel hebt op de boekingentabel, want je zou moeten groupen op een BoekingID oid.

Edit 2: Sorry :o ;)

[ Voor 33% gewijzigd door Verwijderd op 26-09-2004 20:36 ]


  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
Dan krijg ik alsnog teveel resultaten die ik bij elkaar opgetelt moet hebben. Kijk, dit is wat ik als uitkomst wil, misschien is het dan wat duidelijker:

code:
1
2
deelnemers  opbrengst   provisie                   netto opbrengst
161       275.332,00    30.773,10               244.558,90

[ Voor 3% gewijzigd door drGoeroe op 26-09-2004 19:40 ]


  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
Verwijderd schreef op 26 september 2004 @ 19:36:
Wat Mr. Lui waarschijnlijk bedoelde is om r.reiscode uit de GROUP BY clausule te halen. Je vraagstelling is ook raar, want volgens mij wil je niet deze totalen per reis maar per boeking. Maar misschien begrijp ik je verkeerd ...

Edit:
Sterker nog, wat jij wil kan volgens mij niet, omdat je geen goede sleutel hebt op de boekingentabel, want je zou moeten groupen op een BoekingID oid.
Het zou wel moeten kunnen.. het is een opdracht in een SQL tutorial :/

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 11:03

Freee!!

Trotse papa van Toon en Len!

Na nog eens goed kijken snap ik eigenlijk niet wat prijs en provisie te zoeken hebben in de GROUP BY clausule. Die zijn daar volgens mij totaal overbodig.
Verwijderd schreef op 26 september 2004 @ 19:36:
Wat Mr. Lui waarschijnlijk bedoelde is om r.reiscode uit de GROUP BY clausule te halen.
Twee puntjes:
• Gelieve mijn nick correct te spellen
• Volgens mij is de hele GROUP BY overbodig (die resulteert in die 8 verschillende rijen). Ik weet niet welke SQL-engine gebruikt wordt en ik heb op dit moment niets fatsoenlijks bij de hand dus ik kan het zelf helaas niet testen.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
Ik test alles uit in MS Acces, zonder GROUP BY krijg ik die verdomde foutmelding dat SUM(b.aantal) * r.prijs geen deel uitmaken van een statistische functie :'(

De GROUP BY staat er dus uit wanhopigheid.

[ Voor 15% gewijzigd door drGoeroe op 26-09-2004 20:00 ]


  • BrZ
  • Registratie: Maart 2000
  • Laatst online: 20-05 16:16

BrZ

Ehm, zo iets?

code:
1
2
3
4
5
6
SELECT 
SUM(b.aantal) AS deelnemers, 
SUM(b.aantal * r.prijs) AS opbrengst,
SUM(b.aantal * r.prijs * r.provisie) AS provisie
FROM boekingen b, reizen r
WHERE b.reiscode = r.reiscode


(en dan nog netto, maar dat is gewoon die 2 kolommen van elkaar aftrekken)

  • drGoeroe
  • Registratie: Januari 2002
  • Laatst online: 04-09-2021
BrZ schreef op 26 september 2004 @ 20:01:
Ehm, zo iets?

code:
1
2
3
4
5
6
SELECT 
SUM(b.aantal) AS deelnemers, 
SUM(b.aantal * r.prijs) AS opbrengst,
SUM(b.aantal * r.prijs * r.provisie) AS provisie
FROM boekingen b, reizen r
WHERE b.reiscode = r.reiscode


(en dan nog netto, maar dat is gewoon die 2 kolommen van elkaar aftrekken)
Ah, mister, you're genius _/-\o_

Mag ik u hartelijk bedanken :*)
Pagina: 1