Samenvoegquery geeft dubbele records

Status
Niet open voor verdere reacties.

tclaesse

Gebruiker
Lid geworden
8 jan 2004
Berichten
240
Hallo,

In m'n samenvoegquery 'Kopie van Qry Besturen OCMW's jaar' heb ik getracht om via 3 parameters (type, besluit en boekjaar) een overzicht weer te geven van alle besturen (van Aarschot tot Zoutleeuw). Bij het type vult men 'OCMW' in, bij besluit 'Rekening' en bij boekjaar '2011'

Bij het resultaat blijkt echter dat bepaalde records dubbel verwerkt zijn.
Kan iemand me helpen om deze fout in SQL recht te zetten? Alvast bedankt!

http://www.mijnbestand.nl/Bestand-PFRLORIN7L3V.mdb
 
Probeer het eens met de volgende query:

Code:
SELECT OCMW.Bestuur, OCMW.Binnenkomst, OCMW.BBC, OCMW.Schorsing, OCMW.Arr, OCMW.Nummer, OCMW.DBS, OCMW.Nr, OCMW.[Uit], OCMW.Kennisname, OCMW.Type, OCMW.Besluit, OCMW.Boekjaar, OCMW.Jaar
FROM OCMW
WHERE (((OCMW.Type) Like [Type:]) AND ((OCMW.Besluit) Like [Besluit:]) AND ((OCMW.Boekjaar) Like [Boekjaar:]))
ORDER BY OCMW.Bestuur
UNION ALL SELECT Bestuur, Null as Binnenkomst, Null as BBC, Null as Schorsing, Null as Arr, Null as Nummer, Null as DBS, Null as Nr, Null as Uit, Null as Kennisname, Null as Type, Null as Besluit, Null as Boekjaar, Null as Jaar
FROM OCMW
WHERE Type Is Null
AND Boekjaar Is Null
AND Besluit Is Null
AND NOT EXISTS
(
SELECT '1'
FROM OCMW AS OCMW_1
WHERE OCMW_1.Type Is Not Null
AND OCMW_1.Boekjaar Is Not Null
AND OCMW_1.Besluit Is Not Null
AND OCMW.Bestuur = OCMW_1.Bestuur
)
ORDER BY BESTUUR;

Tardis
 
Dit is zeker al een begin maar het is nog niet helemaal correct. Wanneer ik bij 'type' OCMW invul, bij 'Besluit' Rekening en bij boekjaar '2011' dan merk ik bijvoorbeeld dat de lijst begint met 'AFFLIGEM' in plaats van 'AARSCHOT'.

Hoewel het OCMW van Aarschot geen rekening in het boekjaar 2011 bezit zou toch deze blanco met vooraan dus als bestuur AARSCHOT moeten worden vertoond. Dit om steeds een totaal beeld te krijgen van de 65 besturen. Nu heb ik er in m'n query 59.

Alvast bedankt bij voorbaat. Ben momenteel nog volop bezig met sql en dus nog beginner.
 
Code:
SELECT OCMW.Bestuur As Bestuur, OCMW.Binnenkomst, OCMW.BBC, OCMW.Schorsing, OCMW.Arr, OCMW.Nummer, OCMW.DBS, OCMW.Nr, OCMW.[Uit], OCMW.Kennisname, OCMW.Type, OCMW.Besluit, OCMW.Boekjaar, OCMW.Jaar
FROM OCMW
WHERE (((OCMW.Type) Like [Type:]) AND ((OCMW.Besluit) Like [Besluit:]) AND ((OCMW.Boekjaar) Like [Boekjaar:]))
UNION  
SELECT Besturen.Bestuur, Null as Binnenkomst, Null as BBC, Null as Schorsing, Null as Arr, Null as Nummer, Null as DBS, Null as Nr, Null as Uit, Null as Kennisname, Null as Type, Null as Besluit, Null as Boekjaar, Null as Jaar
FROM Besturen
WHERE NOT EXISTS
(
SELECT '1'
FROM OCMW
WHERE (((OCMW.Type) Like [Type:]) AND ((OCMW.Besluit) Like [Besluit:]) AND ((OCMW.Boekjaar) Like [Boekjaar:]))
AND OCMW.Bestuur = Besturen.Bestuur
)

Tardis
 
Tardis,

Dit lijkt op het eerste zicht hetgeen ik zocht, alvast heel erg bedankt!
Nog één vraagje : Ik stel de query nu in met 3 parameterwaarden achter elkaar (type, besluit en boekjaar).
Zou ik bijvoorbeeld ook kunnen gebruik maken van een keuzelijst met invoervak ter vervanging van het popupvenster 'parameterwaarde opgeven'?
 
Uiteraard kan dat.

Maak een formulier.
Zet daarop 3 keuzelijsten voor Type, Rekening en Boekjaar.
Via een knop kun je vervolgens de query openen.
In je query moet je de parameters vervangen door een verwijzing naar je keuzelijsten.

Stel, je formulier heet frmZoekBesluiten.
Je keuzelijsten heten resp. lstType, lstBesluit en lstBoekjaar.
Dan wordt je query als volgt:

Code:
SELECT OCMW.Bestuur As Bestuur, OCMW.Binnenkomst, OCMW.BBC, OCMW.Schorsing, OCMW.Arr, OCMW.Nummer, OCMW.DBS, OCMW.Nr, OCMW.[Uit], OCMW.Kennisname, OCMW.Type, OCMW.Besluit, OCMW.Boekjaar, OCMW.Jaar
FROM OCMW
WHERE OCMW.Type = Forms!frmZoekBesluiten!lstType
AND OCMW.Besluit = Forms!frmZoekBesluiten!lstBesluit
AND OCMW.Boekjaar = Forms!frmZoekBesluiten!lstBoekjaar
UNION SELECT Besturen.Bestuur, Null as Binnenkomst, Null as BBC, Null as Schorsing, Null as Arr, Null as Nummer, Null as DBS, Null as Nr, Null as Uit, Null as Kennisname, Null as Type, Null as Besluit, Null as Boekjaar, Null as Jaar
FROM Besturen
WHERE NOT EXISTS
(
SELECT '1'
FROM OCMW
WHERE OCMW.Type = Forms!frmZoekBesluiten!lstType
AND OCMW.Besluit = Forms!frmZoekBesluiten!lstBesluit
AND OCMW.Boekjaar = Forms!frmZoekBesluiten!lstBoekjaar
AND OCMW.Bestuur = Besturen.Bestuur
);

Mooier is om niet je query te openen maar om een rapport te openen.
Probeer dat eens.

Tardis
 
Dit zal ik zeker proberen. Ik vroeg me wel af of m'n binnen sql geen gebruik kan maken van een selectievakje aan/uit. Het is zo dat ik in m'n hoofdtabel 'OCMW' het veld 'BBC' gemarkeerd heb als aan/uit maar in m'n query verschijnt enkel een 0 of -1. Dien ik dit binnen m'n sql code ergens aan te passen misschien?

Kan u me ook misschien zeggen waarom in bovenstaande query SELECT '1' wordt vermeld? De rest van de opbouw ervan lijkt me wel duidelijk.
 
Laatst bewerkt:
Als je een subquery aanroept via EXISTS of NOT EXISTS wordt er alleen gekeken of er records in de subquery worden opgehaald.
Meer niet.
Vandaar SELECT '1' (gebruik ik standaard).
Je kan ook bijvoorbeeld SELECT 1 of SELECT NULL gebruiken.

Tardis
.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan