[Access/SQL] SelectieQuery

Pagina: 1
Acties:

  • ErikNL
  • Registratie: April 2004
  • Laatst online: 18-08 20:49
Hoi,

Ik zit al een tijdje met het volgende probleem. Waar ik werk heb ik een (eenvoudige) database gemaakt die tot nu toe voldeed aan onze behoefte. Maar nu wil ik bepaalde onderdelen wat verder ontwikkelen.

Zal eerst een zeer vereenvoudigde korte omschrijving geven waar de database voor dient:

In onze database worden inschrijvingen van beleggingen aan clienten gekoppeld.
Er is een tabel clienten, een tabel producten en een tabel orders.

Momenteel rapporteren wij op basis van een simpele query die alle orders per client weergeeft in een rapportageformulier, welke wij uitprinten en naar de client sturen.

Nu wil ik eigenlijk een query, die alle inschrijvingen van een client in een bepaald product sorteert.

Een voorbeeld:

Client A heeft de volgende inschrijvingen gedaan:
01-01-05 50.000 in product 1
01-02-05 150.000 in product 2
01-02-05 50.000 in product 1
01-04-05 75.000 in product 1

Client B heeft de volgende inschrijvingen gedaan:
01-01-05 100.000 in product 1
01-02-05 100.000 in product 2
01-02-05 200.000 in product 3
01-02-05 150.000 in product 1


Dus nu wil ik dat de query weergeeft:
client A product 1 175.000
client A product 2 150.000
client B product 1 250.000
client B product 2 100.000
client B product 3 200.000

Het is denk ik een nog vrij simpel probleem maar ik kom er nog steeds niet aan uit, heb ook al geprobeerd om wat meer over SQL te leren en het probleem zo op te lossen, want ik vermoedt dat dat de makkelijkste manier is.

Ik dacht eerst dat het op te lossen was door een query per product te maken en dan de SOM functie te gebruiken, maar aangezien het aantal producten wat wij aanbieden inmiddels al op 20 zit is dit geen werkbare oplossing meer.

Het is dus kortom de bedoeling een query te schrijven waarbij er allereerst op klantniveau wordt weergegeven en daaronder de totalen per product.

Mocht er meer info nodig zijn dan hoor ik het graag. Hopelijk kan iemand mij hiermee helpen. Ik heb het gevoel een beetje rond te draaien en daardoor de wellicht simpele oplossing niet te zien.

Mvg Erik

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

1. Je hoeft niet meer te groeten onder iedere post ;)

2. Je zou voor een query (klinkt zo erg als een request ;)) eigenlijk ook je tabelstructuur moeten showen.



Wat je eerst kan doen is een query maken (eventueel met behulp van de wizard) waarbij je eerst alle data selecteert en weergeeft zoals je het wilt hebben. Vervolgens zet je een som op de kolom die je wilt optellen. Gevolg daarvan is dat je dubbele waardes weergeeft (wat weer op te lossen is met een distinct ;))

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Vozze
  • Registratie: December 2001
  • Laatst online: 20-08 22:02
BtM909 schreef op maandag 05 september 2005 @ 12:14:
1. Je hoeft niet meer te groeten onder iedere post ;)

2. Je zou voor een query (klinkt zo erg als een request ;)) eigenlijk ook je tabelstructuur moeten showen.



Wat je eerst kan doen is een query maken (eventueel met behulp van de wizard) waarbij je eerst alle data selecteert en weergeeft zoals je het wilt hebben. Vervolgens zet je een som op de kolom die je wilt optellen. Gevolg daarvan is dat je dubbele waardes weergeeft (wat weer op te lossen is met een distinct ;))
Sum, group by en dan een ORDER BY op klant en artikel.

[ Voor 7% gewijzigd door Vozze op 05-09-2005 12:56 ]

"He who thinks knows evertyhing, knows nothing" - Socrates


  • ErikNL
  • Registratie: April 2004
  • Laatst online: 18-08 20:49
:-)

De tabel is indd veel uitgebreider dan hierboven vermeld.

Ik heb inderdaad geprobeerd om iets met DISTINCT te doen. Hieronder de standaard SQL van de query uit de tabel:

code:
1
2
3
4
5
6
SELECT Tabel_orders.Nummer, Tabel_orders.NaamClient, Tabel_orders.ProductID, 
Tabel_orders.ProductNaam, Tabel_orders.DatumStorting, Tabel_orders.Aankoopkoers, 
Tabel_orders.BedragStorting, Tabel_producten.HuidigeKoers, Tabel_orders.AantalStukken, Tabel_orders.SoortTransactie
FROM Tabel_orders INNER JOIN Tabel_producten ON Tabel_orders.ProductID = Tabel_producten.ProductID
GROUP BY Tabel_orders.Nummer, Tabel_orders.NaamClient, Tabel_orders.ProductID, Tabel_orders.ProductNaam, Tabel_orders.DatumStorting, Tabel_orders.Aankoopkoers, Tabel_orders.BedragStorting, Tabel_producten.HuidigeKoers, Tabel_orders.AantalStukken, 
Tabel_orders.SoortTransactie;


Nu kan ik indd een SOM gebruiken op het bedrag (Bedragstorting) en het aantal stukken (AantalStukken).
Maar hoe gebruik ik dan de DISTINCT hierin? Als ik deze na SELECT zet dan verandert er niets en blijft er per klant staan:

Klant A
01-01-05 50.000 in product 1
01-02-05 150.000 in product 2
01-02-05 50.000 in product 1
01-04-05 75.000 in product 1

Ik ben echt totaal niet thuis in SQL en snap niet waar ik dan de DISTINCT kan zetten zodat hij per klant een totaaloverzicht per product geeft.

Verwijderd

SUM(AANTAL)......GROUP BY KLANT, PRODUCT
daarmee zou je het moeten kunnen doen, geen distinct nodig !

  • ErikNL
  • Registratie: April 2004
  • Laatst online: 18-08 20:49
Kun je iets specifieker zijn? Ik ben echt een leek in SQL..

Waar zet ik de SUM in bovenstaande code? Het zal echt wel een domme vraag zijn, maar ik heb het altijd gered met de simpele ontwerpweergave en wizards?

Verwijderd

ErikNL schreef op maandag 05 september 2005 @ 14:20:
Kun je iets specifieker zijn? Ik ben echt een leek in SQL..

Waar zet ik de SUM in bovenstaande code? Het zal echt wel een domme vraag zijn, maar ik heb het altijd gered met de simpele ontwerpweergave en wizards?
Voor dat soort (simpele) vragen moet ik je toch echt naar de helpfile of een SQL tutorialsite verwijzen. Hier op GoT wordt wel verwacht dat je er zelf ook enige tijd insteekt....

en wees blij dat ik dit antwoord geef, er zijn andere gebruikers die het zelfde in minder nette woorden zouden zeggen...

[ Voor 11% gewijzigd door Verwijderd op 05-09-2005 14:24 ]


  • ErikNL
  • Registratie: April 2004
  • Laatst online: 18-08 20:49
Ik heb er al erg veel tijd ingestoken om het proberen op te lossen..

Ik ben erg blij met de hulp en antwoorden en ben via verschillende SQL sites bezig geweest om te snappen hoe deze functies op te bouwen. De simpele lukken wel en spreken voor zich, ik loop gewoon vast met het inbouwen van meerdere variabelen. Daarom hoopte ik dat iemand me hiermee zou kunnen helpen. Ik heb de database vorig jaar gebouwd en sindsdien voldeed hij altijd. Nu moeten er wat aanpassingen komen en ik probeer deze zo efficient mogelijk te maken..

  • ErikNL
  • Registratie: April 2004
  • Laatst online: 18-08 20:49
Ik denk dat ik de oplossing al heb gevonden... Het probleem zat hem denk ik in het feit dat ik te veel velden in mijn query had waardoor unieke eigenschappen aan een inschrijving vastzaten, zoals een datum. Hierdoor telde hij ze niet bij elkaar op denk ik..

als ik er over nadenk klinkt dat ook wel logisch eigenlijk :-)

  • ErikNL
  • Registratie: April 2004
  • Laatst online: 18-08 20:49
soms zit je gewoon te dicht op een probleem om de oplossing te zien die soms dus heel makkelijk en logisch is (voor andere mensen)...

iig bedankt voor de hulp in de goede richting

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op Monday 05 September 2005 @ 14:23:
[...]

Voor dat soort (simpele) vragen moet ik je toch echt naar de helpfile of een SQL tutorialsite verwijzen. Hier op GoT wordt wel verwacht dat je er zelf ook enige tijd insteekt....

en wees blij dat ik dit antwoord geef, er zijn andere gebruikers die het zelfde in minder nette woorden zouden zeggen...
Ik zie geen topicreport. Wat klopt hier niet?
Policy mbt replies in 'slechte' topics


Maar idd een redelijk basic vraagje waar je met een sql-tutorial of de help van Access goed uit moet kunnen komen. Ook in het query-ontwerp raster heb je de mogelijkheid om per veld aan te geven wat sql moet doen: groeperen, optellen, grootste waarde pakken, kleinste waarde pakken, eerste etc.

TS, wil je ook als je als laatste gepost hebt in je eigen topic de [edit] knop gebruiken? Dit wordt gezien als kicken en dat wordt niet zo gewaardeerd.

[ Voor 10% gewijzigd door Lustucru op 05-09-2005 15:04 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland

Pagina: 1