[Access/SQL] Werkende Sub-Query

Pagina: 1
Acties:

  • Amien90
  • Registratie: November 2001
  • Laatst online: 29-07-2021
Ik heb op dit moment 2 werkende SQL Queuries staan in Access:

Deze laat top 15 beste klanten zien.

code:
1
2
3
4
SELECT TOP 15 Klantnaam, Count(Dossier) AS AantalDossiers
FROM DB
GROUP BY Klantnaam
ORDER BY 2 DESC;


Deze laat Agenda data zien.

code:
1
2
SELECT Dossier, Klantnaam, DATEDIFF("d",Agenda,date()) AS AgendaDate
FROM DB;


Hoe kan ik nu van de top 15 klanten de agenda data laten zien?

ik dacht zelf aan zoiets, maar het werkt niet:

code:
1
2
3
4
5
6
SELECT Dossier, Klantnaam, DATEDIFF("d",Agenda,date()) AS AgendaDate
FROM DB
WHERE Klantnaam IN (SELECT TOP 15 Klantnaam, Count(Dossier) AS AantalDossiers
FROM DB
GROUP BY Klantnaam
ORDER BY 2 DESC;);

[ Voor 40% gewijzigd door Amien90 op 23-10-2007 18:55 ]


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Zo te zien zul je ook een foutmelding krijgen die -als je goed leest- precies aangeeft waar de fout zit? :)

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


  • Amien90
  • Registratie: November 2001
  • Laatst online: 29-07-2021
Klopt,

"You have written een subquery that can return more than one field without using the EXISTS reserved word in the main query's FROM clause. Revise the SELECT statement of the subquery to request only one word"

probleem is dat de subquery altijd 15 results zal geven. Kan ik dit probleem wel oplossen middels een subquery?

  • jwpmzijl
  • Registratie: December 2002
  • Laatst online: 21-06 09:07
Amien90 schreef op dinsdag 23 oktober 2007 @ 18:51:

code:
1
2
3
4
5
6
SELECT Dossier, Klantnaam, DATEDIFF("d",Agenda,date()) AS AgendaDate
FROM DB
WHERE Klantnaam IN (SELECT TOP 15 Klantnaam, Count(Dossier) AS AantalDossiers 
FROM DB
GROUP BY Klantnaam
ORDER BY 2 DESC;);
Als je IN of NOT IN gebruikt in het WHERE deel van je query dan mag de subquery die je gebruikt alleen het veld tonen waarop je wilt linken. Jouw subquery laat echter 2 velden zien. Je zult het veld Aantaldossiers weg moeten halen en dan zou het wel moeten werken.

Iets anders: je kunt in plaats van klantnaam beter met een recordID gaan werken je krijgt nl. vroeg of laat te maken met klanten die dezelfde naam hebben (maar bijv. op een ander adres wonen etc).

Hans van Zijl


  • Amien90
  • Registratie: November 2001
  • Laatst online: 29-07-2021
Als je IN of NOT IN gebruikt in het WHERE deel van je query dan mag de subquery die je gebruikt alleen het veld tonen waarop je wilt linken. Jouw subquery laat echter 2 velden zien. Je zult het veld Aantaldossiers weg moeten halen en dan zou het wel moeten werken.
Klopt. . maar ik heb deze kolom nodig om Top 15 uit te rekenen.

  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

Dat kan wel zijn, maar daarom hoeft hij nog niet in je resultaatset te zitten...

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
ATS schreef op vrijdag 26 oktober 2007 @ 14:34:
Dat kan wel zijn, maar daarom hoeft hij nog niet in je resultaatset te zitten...
Blijkbaar niet, maar ik ben ook best wel benieuwd hoe je dit voor elkaar krijgt...( dus zonder dat je subquery alles teruggeeft en je de laatste 15 alleen in je hoofdquery bepaalt )

Ik heb zo snel even geen idee hoe dit in sql te doen...

  • Bolukan
  • Registratie: Oktober 2002
  • Laatst online: 09-07 19:01
Probeer dit eens:
SQL:
1
2
3
4
SELECT TOP 15 Klantnaam 
FROM DB
GROUP BY Klantnaam
ORDER BY Count(Dossier) DESC;

  • Amien90
  • Registratie: November 2001
  • Laatst online: 29-07-2021
Bolukan schreef op vrijdag 26 oktober 2007 @ 19:50:
Probeer dit eens:
SQL:
1
2
3
4
SELECT TOP 15 Klantnaam 
FROM DB
GROUP BY Klantnaam
ORDER BY Count(Dossier) DESC;
Geniaal .. zo simpel kan het dus zijn .. het werkt :)
Pagina: 1