Query die data ophaalt uit de uitkomst van een andere query

Status
Niet open voor verdere reacties.

sheldon1964

Gebruiker
Lid geworden
11 aug 2013
Berichten
6
Hallo allemaal,

Ik ben bezig een query te schrijven die data uit een tabel haalt, maar de aansturing is data uit een andere tabel.

Ik heb 1 tabel met rijen waarvan er 1 een aantal bevat, dit is waar ik mee wil werken.
Hij moet dan dat getal gebruiken om locatie`s uit een andere tabel op te halen, de verbindende facter is een uniek 8 cijferig nummer.
De locatie`s zijn 6 cijferig

Tabel 1
00000001, 290850
00000001, 295050
00000001, 335050
00000001, 393050
00000002, 212120
00000002, 216220
00000002, 602060
00000002, 716060

Tabel 2
00000001, 2
00000002, 5

Nu is het de bedoeling dat de query uit tabel 1 voor elk artikelnummer het aantal locatie`s terug geeft, dit mogen de eerste zijn die die tegenkomt, maar mag ook random.

Dus voor 00000001 moet hij dan 393050,295050 teruggeven en van 000002 verwacht ik ze allemaal daar ik er 5 nodig heb, maar er maar 4 zijn.


groeten en alvast bedankt sheldon1964
 
Laatst bewerkt:
Ik heb geen flauw idee wat je bedoelt.
Ik heb 1 tabel met rijen waarvan er 1 een aantal bevat, dit is waar ik mee wil werken.
Hij moet dan dat getal gebruiken om locatie`s uit een andere tabel op te halen, de verbindende facter is een uniek 8 cijferig nummer.
[Tabel 1] bevat geen velden die aantallen bevatten, althans niet volgens je voorbeeld. Als ik het goed vertaal, bevat het eerste veld het 8-cijferige artikelnummer, en het tweede veld een locatieID? Maak je een Totalenquery die gaat tellen in tabel 1, dan is dit het resultaat:
Code:
F1	AantalVanF2
00000001	4
00000002	4
En dat is niet 2/5. Maar dat zijn getallen die je uit Tabel 2 haalt, en zegt verder ook niet zo veel. Wil je unieke combinaties van beide velden uit tabel 1, dan volstaat het om te groeperen op beide velden. In dat geval is het resultaat op basis van je voorbeeld exact hetzelfde:
Code:
F1	F2
00000001	35050
00000001	90850
00000001	93050
00000001	95050
00000002	2060
00000002	12120
00000002	16060
00000002	16220
Maar bij grotere aantallen records zal dat natuurlijk anders anders zijn. Je kunt [Tabel 1] en [Tabel 2] aan elkaar koppelen op ArtikelID en het tweede veld erbij zetten. Dan krijg je:
Code:
F1	F2	F3
00000001	35050	2
00000001	90850	2
00000001	93050	2
00000001	95050	2
00000002	2060	5
00000002	12120	5
00000002	16060	5
00000002	16220	5
Maar leg vooral eerst goed uit wat je eigenlijk wilt...
 
Laatst bewerkt:
Hallo Octafish,

Dit is mijn fout, in mijn originele vraag moet je tabel 1 en tabel 2 omdraaien.

Tabel 2 geeft aan dat ik van artikelnr 00000001 2 locatie nodig heb uit tabel 1 die voor dat specifieke artikelnr er 4 opgeeft.

De query die ik zoek is degene die me dan random er 2 geeft (locatie`s )die uiteraard gekoppeld zijn aan dit artikelnr, dit geld ook voor het andere artikelnr.

Alvast bedankt voor de reactie
 
Gaat erg lastig worden; je kunt nog wel op basis van een specifiek veld een TOP 2 ophalen, maar zodra je met Random gaat werken, zul je vermoed ik met meerdere queries moeten werken die je in een UNION weer aan elkaar knoopt. Een voorbeeldje:
Query 1:
Code:
SELECT TOP 2 F1, F2, Int(Rnd([id])*10000) AS Expr1
FROM Tabel1
WHERE (F1="00000001")
ORDER BY F1, Int(Rnd([id])*10000);
Query 2:
Code:
SELECT TOP 2 F1, F2, Int(Rnd([id])*10000) AS Expr1
FROM Tabel1
WHERE (F1="0000000`2")
ORDER BY F1, Int(Rnd([id])*10000);
Levert je in elke query 2 willekeurige records op. Die kun je dan bij elkaar voegen in een UNION query:
Code:
SELECT Query1.F1, Query1.F2
FROM Query1
UNION SELECT Query2.F1, Query2.F2
FROM Query2
ORDER BY F1;
 
Bedankt, zat ik ook wel aan te denken.

Mijn opmerking dat het random moet zijn is kort door de bocht het mogen ook de eerste 2 of 3 of 4 zijn.

Ben hier al een poos mee bezig en hoopte op een simpele oplossing die ik zelf al die tijd al over het hoofd zie.

Waarschijnlijk zit er niets anders op dan de door jouw voorgestelde optie.

bedankt
 
Als het niet om random records gaat, kun je wel met één query vooruit:
Code:
SELECT F1, F2
FROM Tabel1
WHERE (F2 In (SELECT TOP 2 F2 FROM Tabel1 AS Dupe WHERE Dupe.F1 = Tabel1.F1  ORDER BY [F2] DESC));
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan