Toon posts:

[Access] Twee queries samenvoegen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bekentenis: al eerder topic over geplaatst, niet op juiste plek, met verkeerde titel en erg onduidelijk.
http://gathering.tweakers.net/forum/list_messages/1176910

Het beoogde resultaat is een selectie waarbij waarde 1 [Land] uniek is en waarde 2 [Aantal] de grootste waarde heeft

Tabel1
PKLandReligieAantal
1NLprotestant10
2NLkatholiek20
3NLmoslim5
4Irakmoslim98
5Begienatuurgodsdienst2
6Begiekatholiek40


Het beoogde resultaat is dan: alleen de grootste waarde per land:

2NLkatholiek
4Irakmoslim
6Begiekatholiek


Momenteel krijg ik het resultaat slechts met gebruikmaking van twee queries:

Query1
SELECT [Land], MAX([Aantal]) AS [Grootste]
FROM [Tabel1]
GROUP BY [Land]

Query2
SELECT [Query1].[Land], [Tabel1].[Religie], [Tabel1].[Aantal]
FROM [Query1] LEFT JOIN [Tabel1] ON [Query1].[Land] = [Tabel1].[Land]
WHERE [Query1].[Grootste] = [Tabel1].[Aantal]
GROUP BY [Query1].[Land], [Tabel1].[Religie], [Tabel1].[Aantal]

Ik streef ernaar om dit in 1 query te krijgen, mede omdat ik deze query dynamisch in visual basic wil opbouwen en ik met twee queries een beetje in de knoop kom.

Dit lijkt een goede SQL oplossing met een subquery, maar wordt niet gegeten door Access.

SELECT Tabel1.Religie, Tabel1.Land, Tabel1.Aantal
FROM Tabel1, [SELECT Land, MAX(Aantal) AS Grootste FROM Tabel1 GROUP BY Land] AS Results
WHERE Tabel1.Land=Results.Land AND Tabel1.Aantal=Results.Grootste;

  • Boss
  • Registratie: September 1999
  • Laatst online: 24-07 08:05

Boss

+1 Overgewaardeerd

Probeer eens wat te experimenteren met DISTINCT, TOP X en GROUP BY.
Vooral het TOP statement gebruik je niet maar kan je wel helpen hierin.
Volgens mij zou dit in 1 query moeten kunnen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


Verwijderd

Topicstarter
Boss schreef op maandag 27 november 2006 @ 11:52:
Probeer eens wat te experimenteren met DISTINCT, TOP X en GROUP BY.
Vooral het TOP statement gebruik je niet maar kan je wel helpen hierin.
Volgens mij zou dit in 1 query moeten kunnen.
TOP X lijkt me irrelevant, ik heb toch duidelijk MAX nodig.

GROUP BY is een deel van het probleem. Meer velden in query 1 toevoegen resulteert in het tonen van alle records omdat deze velden ook bij GROUP BY moeten verschijnen (anders foutmelding)

DISTINCT is misschien nuttig, maar ik krijg het niet uitgevogeld. Soort combinatie van DISTINCT en MAX nodig....

  • Boss
  • Registratie: September 1999
  • Laatst online: 24-07 08:05

Boss

+1 Overgewaardeerd

Als je de juiste sortering toepast, krijg je met TOP 1 toch de maximale waarde? Dat is in dit geval een mogelijkheid om een extra query te voorkomen.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Nou nee, de opzet is helemaal correct, behalve dan dat Access verwacht dat de subquery tussen gewone ronde haken staat pv blokhaken. :)
[]. (met punt dus) schijnt ook te kunnen en als je een innerjoin pakt ipv where dan willen die blokhaken ook nog lukken :?

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


Verwijderd

Topicstarter
Werkt inderdaad gewoon. Ik had zelfs al ronde ipv blokhaken bedacht, maar waarschijnlijk had ik toen elders een foutje gemaakt.

dank, ik kan weer gerust slapen.


Edit: access vervangt vervolgens de ronde haken door vierkante met een punt erachter. Ik snap de punt niet, maar accepteer hem zonder meer.

[ Voor 30% gewijzigd door Verwijderd op 30-11-2006 11:09 ]

Pagina: 1