TOP 12 van samengevoegde UNION's van query

Status
Niet open voor verdere reacties.

Hankieh

Gebruiker
Lid geworden
14 jun 2010
Berichten
37
Hoi

Ik heb drie queries (zie hieronder) samengevoegd doormiddel van Union. Het zijn 13 resultaten. Ik wil er echter maar 12. Ik heb TOP 12 gebruikt in elke query maar ik neem aan dat hij van van elke query er dan maximaal 12 neemt. Dat maakt dus een totaal van 36.
Hoe zorg ik er voor dat net als de ORDER BY ook de TOP 12 voor alle drie queries geldt?

Alvast bedankt.
Groeten Chris

Query
Code:
QueryInvoer = "
     (SELECT TOP 12 Id, Achternaam, Voornaam, Shirtnaam, Geboortedatum 
      FROM spelers 
      WHERE Shirtnaam Like '%" & IngevoerdeShirtnaam & "%')
UNION 
     (SELECT TOP 12 Id, Achternaam, Voornaam, Shirtnaam, Geboortedatum 
      FROM spelers 
      WHERE Achternaam Like '%" & IngevoerdeShirtnaam & "%') 
UNION 
     (SELECT TOP 12 Id, Achternaam, Voornaam, Shirtnaam, Geboortedatum 
      FROM spelers 
      WHERE Voornaam Like '%" & IngevoerdeShirtnaam & "%') 
ORDER BY Shirtnaam"

Resultaat
Code:
	Surname	     First name	Shirt name	Date of Birth
---------------------------------------------------------------
55	Born	     Chris      Bo	        19-11-1979	
26	Born	     Mirco	Born	        28-6-1994	
57		     	        Born I		
58			        Born II		
59     			        Born III		
60	     		        Born IV		
61		     	        Born V		
62			        Born VI		
63     			        Born VII		
64	     		        Born VIII		
54	Borner	     Bastiën	Borner          9-1-1994	
53	Bornsar	     Christoph	Bornsar         21-1-1992	
56	Willemsen    Bornard	Willemsen       23-6-1995
 
Je kunt beter een nieuwe query maken op basis van de UNION query. Access kan daar niet zoveel mee, anders dan de SQL laten zien. En zoals je gemerkt hebt, krijgt elke (sub)query nu zijn eigen top 12. Overigens zie ik volkomen identieke queries in je voorbeeld; lijkt mij een beetje onzinnig om daar een UNION voor te gebruiken. Ik denk dat het een stuk slimmer kan wat je wilt. Als ik zou weten wat dat is :)
 
Dat krijg je alleen voor elkaar als je je union queriet via een aparte query waarin je TOP 12 gebruikt.
Daarvoor zul je eerst je UNION moeten definieren als een aparte query.

Tardis
 
Dus zoals je normaal via een query van een tabel een 'geminimaliseerde' versie van de tabel maakt, gooi je daar weer een query over heen om de top 12 te halen?

In de trant van: Query2 = "SELECT TOP 12 * FROM Query1"

Ik weet nog niet precies hoe ik dat ga doen, maar het lijkt me nog niet zo'n gek idee! Ik zal er eens een kijkje in nemen.
 
Yep. Maar ik blijf met de vraag zitten waarom je 13 identieke queries met een UNION aan elkaar knoopt :)
 
Mogelijke andere optie:

Code:
QueryInvoer = "
     (SELECT TOP 12 Id, Achternaam, Voornaam, Shirtnaam, Geboortedatum 
      FROM spelers 
      WHERE Shirtnaam Like '%" & IngevoerdeShirtnaam & "%'
      OR Achternaam Like '%" & IngevoerdeShirtnaam & "%'
      OR Voornaam Like '%" & IngevoerdeShirtnaam & "%'
ORDER BY Shirtnaam"

Tardis
 
Mogelijke andere optie:
Tardis
Thnx Tardis dit werkt perfect. Ik heb het destijds AND geprobeerd maar dan niet aan OR denken :confused:

Yep. Maar ik blijf met de vraag zitten waarom je 13 identieke queries met een UNION aan elkaar knoopt :)
Ik begrijp het niet maar ben benieuwd wat je bedoeld.

Ik had drie queries aan elkaar geknoopt.
1e = Zoekt naar alle records die in de Achternaam een gelijkenis met 'Born' hebben.
2e = Zoekt naar alle records die in de Shirtnaam een gelijkenis met 'Born' hebben.
3e = Zoekt naar alle records die in de Voornaam een gelijkenis met 'Born' hebben.
Ik gebruikte UNION vervolgens omdat die de dubbele resultaten er uit filtert.
 
Voor mij zijn dat identieke queries met een andere filtering, die makkelijk in één query kan. Zoals in het voorbeeld.
 
Oké. Dan begrijp ik het.
OctaFish en Tardis, bedankt voor jullie hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan