Alternatief? voor multi criteria in query

Status
Niet open voor verdere reacties.

allard1977

Gebruiker
Lid geworden
7 feb 2011
Berichten
215
Hallo Allemaal,

Ik heb een query waar ik voorhondenwedstijden High in Trial (beste van zijn klasse of weekend) moet uit selectren.
alles werkte tot nu toe kreeg mij gewenste resultaten op papier. nu wou ik nog wat meer toevoegen maar nu zijn mijn lijntjes op in de query.
wat is nu het makkelijkst veder gaan in SQL of alles omzetten in VBA code.
query.png

wie kan me advies geven wat beste route is.

alvast heel erg bedankt
Allard
 
Ik zie dat je filtert vanuit een geopend formulier. Daar zou ik subiet mee stoppen, want dat maakt je procedure onmogelijk ingewikkeld. Nou ja, niet onmogelijk, wel hopeloos. Zelf doe ik dit sowieso nooit, ik maak het filter op het formulier en zet dat dan in de query. Dat is dan wel een VBA oplossing, maar dat maakt verder niet uit, want het is nog steeds SQL, net zoals de methode die je nu gebruikt (kijk maar eens in de SQL weergave. Zorg wel dat je stevig zit, want je gaat schrikken ;)).

je gebruikt zo te zien verschillende combinaties van velden in je query, en dat maakt het samenstellen van een filter tamelijk lastig. Één veld lijkt, zo te zien, in elk criterium hetzelfde (EventID), maar ik zie ook een veld met zo te zien dezelfde waarde (2. ATD) maar met verschillende schrijfwijze?

Het probleem met te weinig rijen voor een criterium is simpel op te lossen met de parameter In. Je krijgt dan één criterium dat er zo uitziet: In(Waarde1; Waarde2; Waarde3 etc). Dat veld herhaal je dan op elke regel waar je verschillende combinaties hebt. Dus als er 4 unieke regels/combinaties zijn, heb je 4 rijen nodig, meer niet. Omdat niet alles te zien is in je plaatje, kan ik er verder weinig van zeggen. Wellicht een voorbeeldje?
 
Hallo Octa,

De schrijfwijze is optisch ze 2._ATD zijn allemaal zelfde.

deze query wordt inderdaad gefiltert van een formulier. deze qeury wordt gebruikt om een report van data te voorzien.
dus op formulier zijn dropboxen (unbound) daar selecteer gewenste filter. en druk op knop om report te openen.

de IN parameter lijkt me inderdaad een goeie oplossing had er al eens naar gekeken. maar als ik die ga gebruiken krijg ik dan wel voor iedere waarde die ik in de IN clausele zet een aparte record.

Een voorbeeld wil ik graag geven. maar is erg lastig het is een17MB grote database met veel namen adressen er in wil dat eigenlijk niet zo vrijgeven. en weet niet als een lege zal werken voor het idee.
en uw zult dan veel meer dingen vinden die niet volgens het boekje zijn:cool:.

alvast erg bedankt
 
Ik vraag me af of wat ik nu zie wel logisch in elkaar zit.
Er zijn regels waar bij Place en DR_Class_Level niets staat. Dat betekent in feite dat alle waardes die daar in de tabellen ineguld zijn in aanmerking komen. Met andere woorden: de regels waar wel een waarde staat voegen niets toe en kan je net zo goed weghalen (de criteria in de andere velden zijn gelijk en de enige die wel invloed hebben).
 
Ik vermoed dat Peter de verschillende criteria niet goed gelezen heeft, want ik ben het niet eens met zijn opmerkingen :). Desalniettemin: we hebben uiteraard geen de van 17 mb met échte data nodig; een db met wat dummy data waarin het probleem duidelijk te zien is, is al genoeg. Uiteindelijk wil je een manier hebben om probleemloos te kunnen filteren. En dat kan ik best maken met een paar dummy records. Zoals ik al zei: het kan vele malen slimmer. En dat is makkelijk te maken op basis van een paar records.
 
Ik heb het misschien wat ongelukkig geformuleerd, maar ik blijf vooralsnog bij mijn mening. Laat me nog een poging wagen.

Als je bijvoorbeeld kijkt naar de derde criteriaregel dan zie je dat alle rijen geselecteerd worden met bepaalde waardes in Division en SanctionNR en BreedID en EventID. De Place en Class_LevelGroup spelen geen rol. Dat er ook criteriaregels zijn waarin wel op bepaalde waardes voor Place en Class_LevelGroup wordt geselecteerd doet dan niet meer terzake (bij die andere regels staan dezelfde waardes voor Division t/m IventID). Op grond van regel 3 doen alle plaatsen en groepen mee.
Het zelfde geldt voor de laatste (zichtbare) criterium regel.

Met andere woorden: als je alle regels behalve de derde en laatste weghaalt, is het resultaat hetzelfde.

Zwak punt in mijn verhaal is dat ik aanneem dat in de kolom SanctionNR op alle rijen hetzelfde staat. Omdat die kolom niet helemaal zichtbaar is, is dat niet helemaal zeker.
 
voorbeeld

Hallo,

Ik heb een voorbeeld hier.
het gaat om het STOCK gedeelte
Als je naar StockQ gaat en dan Q_ATD_HIT dit is wat ik graag wil veranderen. Ben al met de IN bezig geweest.
ik wil dan graag voor idere Class_LevelGroupName de beste vinden.
en voor Class_LevelName.
73 staat voor austrialien sheperd
en ik wil ook zoeken in de andere rassen <>73. en dan specifiek Class_LevelGroupName (started en '' overall)
https://1drv.ms/u/s!AhopVOFNhS5Ni5kUEFObSeZ28zygVw?e=7iZcp6

hoop dat het iest duidelijker wordt.

Allard
 
Hoi,

De regel is dat je alleen HIT kan zijn als je eerste bent geworden. en ik wil voor idere klasse een HIT en ook over alle honden.
maar waar geen 1 staat zijn regels voor andere rassen (<>73) behalve australische herder(73). dit is om te proberen andere rassen te stimuleren om mee te doen.
ja de SanctionNR is overall zelfde
 
Ik had het inderdaad waarschijnlijk niet helemaal goed gezien. Maar wel bijna......... hoop ik :rolleyes:

Zoals ik het nu zie, gaan regels 3 en 8 over alle rassen behalve Australische herders. Echter bij regel 3 speelt Class_LevelGroup geen rol. Alle groepen overige honden worden dus geselecteerd. De beperking die wel op regel 8 zit heeft dus geen nut.
Voor Australische herders (de overige regels) geldt iets soortgelijks. Regel 9 selecteert alle winnaars, ongeacht Class_LevelGroup. Regels 1, 2, 4, 5, 6 en 7 zijn dus overbodig.

Omdat je in je eerste post schreef dat het goed werkt, concludeer ik dat je alleen de regels 3 en 9 nodig hebt. En dus weer regels over hebt.
Probeer het gewoon eens.

Ik werk even op een tablet en kan je database niet bekijken.
 
voorbeeld. rapport

Ik heb dus de IN clausulegebruikt.
queryin.png

krijg dit dan als resultaat
Bekijk bijlage atd hit.pdf

alleen waar ik allen criteria 73 gebruik of Not In 73
om de hond met de meeste punten te hebben. waar de andere criteria niet uit maken werkt niet. Denk zelf dat die in aparte qeury/rapport moet zetten
 
Heb er nog niet naar gekeken, maar zal dat z.s.m. doen. Gewoon op basis van mijn eigen ideeën, die beschouw ik toch als de beste :).
 
Even terug komen op de originele vraag
Ik heb een query waar ik voorhondenwedstijden High in Trial (beste van zijn klasse of weekend) moet uit selectren.
alles werkte tot nu toe kreeg mij gewenste resultaten op papier. nu wou ik nog wat meer toevoegen maar nu zijn mijn lijntjes op in de query.
wat is nu het makkelijkst veder gaan in SQL of alles omzetten in VBA code.

Het meest eenvoudig voor mij is de back-end upgraden naar SQL express. Dan kan je T-SQL gebruiken dat veel krachtiger is dan Access SQL. Daar heb je bv windowing en ranking functies . Je krijgt daar ook gratis de reporting services bij om je rapporten via een internet site beschikbaar te maken.
 
Ik heb naar je documentje gekeken, maar die kan ik niet inlezen in mijn Access versie. Ik weet niet welke jij gebruikt, maar ik heb toch liever een accdb bestandje :).
 
het is een link naar onedrive. mijn accdb bestand is 19mb had hem gezipt maar was nog 2.3mb en max is 1.95mb.
 
Even terug komen op de originele vraag


Het meest eenvoudig voor mij is de back-end upgraden naar SQL express. Dan kan je T-SQL gebruiken dat veel krachtiger is dan Access SQL. Daar heb je bv windowing en ranking functies . Je krijgt daar ook gratis de reporting services bij om je rapporten via een internet site beschikbaar te maken.

dat is een hele verandering. denk dat teveel gaat worden voor mijn database.
 
ik wil dan graag voor iedere Class_LevelGroupName de beste vinden.
en voor Class_LevelName.
73 staat voor austrialien sheperd
en ik wil ook zoeken in de andere rassen <>73. en dan specifiek Class_LevelGroupName (started en '' overall)
Deze specificatie is - voor mij - niet erg duidelijk.
  • Je wilt voor iedere Class_LevelGroupName de beste vinden.
    • Is dat inclusief austrialien sheperds of juist alleen daarvoor??
    • Waarom selecteer je dan op bepaalde Class_LevelGroupNames?

  • En voor Class_LevelName.
    • Bedoel je dat je per Class_LevelName ook de beste wilt vinden? Ook hier geldt dat als je alle Class_LevelNames wilt zie je geen criteria hoeft toe te voegen.
    • Is dat inclusief austrialien sheperds of alleen juist daarvoor?

  • En ik wil ook zoeken in de andere rassen <>73 en dan specifiek Class_LevelGroupName (started en overall)
    • Betekent dit dat het eerste punt alleen voor austrialien sheperds is? Lijkt me niet, want daar wil je alle Class_LevelGroupNames?
    • En gaat het in dit punt wel om één eis of om twee aparte wensen?

Op basis van de opgestuurde database kunnen we verder niets omdat belangrijke tabellen tabellen (Dogs en Stock) leeg zijn.
 
Hallo,

Ja sorry dat de database leeg is. maar kan geen personen er in hebben ivm privacy.
Class_LevelNames = klasses (soals in voetbal 1ste, 2de divisie )
ik wil dus voor iedere klasse (open, advanced, starter),de beste. maar ik wil ook de beste van die 3 klasse (overall) voor austrialien sheperds.

en ik zou graag voor de starter klas en van alle niet austrialien sheperds de beste vinden.

Ik zal kijken als ik dummie namen kan ivoegen in database.

Groet Allard
 
dat is een hele verandering. denk dat teveel gaat worden voor mijn database.
Niets van deze tip aantrekken; noella wordt heel ongelukkig als ze niet minstens één keer per maand in het Access forum het (in haar ogen onvolprezen) programma SQL server of SQL Express kan aanbevelen. Ik verdenk haar er wel eens van dat ze het Access forum leeg wil trekken :).

Wat je database betreft: daar zit een beveiliging op, dus ik kan niet bij de VBA van de formulieren. En dan kan ik je uiteraard niet helpen. Er zit zo'n overdaad aan queries en formulieren in de db, dat ik alleen van het kijken al moe word, dus je zult ons een béétje de goede kant op moeten krijgen door op zijn minst te zeggen om welk formulier/query het gaat, en dus de handel niet te beveiligen. Ik durf te wedden dat ik het binnen een kwartier heb opgelost :).
 
Ik denk dat je die verschillende wensen niet met één query kan oplossen. Je zal er meerdere nodig hebben. Begin gewoon eens met een query om 1 vraag te beantwoorden.

Om alles goed te kunnen testen zijn veel gegevens nodig. Is het niet mogelijk in de oorspronkelijke database de persoonsgegevens leeg te maken of te vervangen door fakegegevens? Om de bestandsgrootte te beperken kan je ook niet relevante tabellen verwijderen.
 
Ik ben het niet met xps351 eens, het kan best met één query. Alleen heb ik geen flauw idee welke waarden ik moet invullen om het door jou gewenste resultaat te bereiken. Ik heb de query wat netter neergepend, zodat je kunt zien hoe de verschillende regels (het zijn er drie, minder kan echt niet) zijn opgebouwd.

Code:
SELECT Tbl03_Dogs.ArmnumberStock, Tbl09_Stock.Stamboomnr, Tbl09_Stock.Trail, Tbl03_Dogs.ExhibitorStock, Tbl09_Stock.Time, Tbl09_Stock.Score, Tbl09_Stock.Place, Tbl09_Stock.Division, 
DR_CLass_Level.Class_LevelName, DR_CLass_Level.Class_LevelGroupName, DateTrailDays.SanctionNR, Tbl03_Dogs.naamhond, Tbl03_Dogs.BreedIDFROM DateTrailDays INNER JOIN (DR_CLass_Level INNER JOIN (Tbl03_Dogs INNER JOIN Tbl09_Stock 
ON Tbl03_Dogs.Stamboomnr = Tbl09_Stock.Stamboomnr) ON DR_CLass_Level.ClassID = Tbl09_Stock.StockKlasID) ON DateTrailDays.SanctionNR = Tbl09_Stock.Trail

WHERE (
    Tbl09_Stock.Division="2._ATD" 
    AND DateTrailDays.SanctionNR=[Forms]![StockForm]![Date2R] 
    AND DateTrailDays.EventID=512)
AND (
    (DR_CLass_Level.Class_LevelGroupName In ('Advanced','Open','Post_Advanced','Started','Working Junior Handler','Novice Handler') 
        AND Tbl03_Dogs.BreedID=73 
        AND Tbl09_Stock.Place=1 
        ) 
    OR (
        DR_CLass_Level.Class_LevelGroupName In ('Started','') 
        AND Tbl03_Dogs.BreedID<>73 
        ) 
    OR (
        ADR_CLass_Level.Class_LevelName In ('Duck/Geese','Sheep/Goats','Cattle') 
        AND Tbl03_Dogs.BreedID=73 
        )
    );
Nogmaals het verzoek om een niet-beveiligde​ database!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan