Select Query met een Count Criteria

Status
Niet open voor verdere reacties.

AMBERTJE

Gebruiker
Lid geworden
27 aug 2009
Berichten
121
Hoi iedereen,

Hier ben ik weer met een Select Query probleempje.
In Query: Qry_Determinatie_PBL_PBS zitten heel wat gegevens die meerdere keren voorkomen.
1) [cust]
2) [pal nr]
3) [rc]
4) [ship]
5) [flowthru type]
6) [Groep]

Per [cust] heb ik heel wat [pal nr] waarvan er vele hetzelfde zijn .
Mijn bedoeling is om per [cust] te tellen hoeveel [pal nr] er zijn met Count (geen dubbele gegevens meer).
Dan in een 2de stadium wil ik weten hoeveel [pal nr] er in totaal zijn per [Groep]

Dit is een poging om te zien hoeveel [pal nr] er zijn per [Groep] maar elke record wordt opgeteld ipv per [pal nr]:
Code:
[/SELECT Qry_Determinatie_PBL_PBS.Groep, Count(Qry_Determinatie_PBL_PBS.[pal nr]) AS [CountOfpal nr], Sum(Qry_Determinatie_PBL_PBS.ship) AS SumOfship
FROM Qry_Determinatie_PBL_PBS
GROUP BY Qry_Determinatie_PBL_PBS.Groep;
CODE]

Kunnen jullie mij nogmaals helpen aub? Ik ben al sinds vanmorgen aan het proberen en het lukt me echt niet?

Groetjes,
Ambertje

Hier een voorbeeldje van de identieke waardes in mijn Query: 
[cust]	[pal nr]	[rc]	[ship]	[flowthru type]	[Groep]
10001	21923470	CW	1	B	vl
10001	21923470	CW	1	B	vl
10001	21923470	SP	1	G	vl
10001	21923487	CW	1	B	vl
10001	21923487	SP	1	G	vl
10001	21923487	SP	1	G	vl
10001	21923487	SP	1	G	vl
10001	21923487	SP	1	G	vl
10001	21923500	SP	3	S	vl
10001	21923500	SP	1	S	vl
10001	21923517	SP	2	T	Tra
10001	21923517	CW	1	T	Tra
10001	21923524	SP	2	T	Tra
10001	21923524	SP	2	T	Tra
10001	21923524	SP	1	T	Tra
10001	21923531	SP	1	V	zu
10001	21923531	SP	2	V	zu
10001	21923531	SP	1	K	zu
10001	21923548	SP	1	V	zu
10001	21923548	SP	1	V	zu
10001	21923548	SP	1	V	zu
10001	21923548	SP	1	V	zu
10001	21923562	SP	1	P	zu
10001	21923562	SP	1	Y	zu
10001	21923562	SP	1	P	zu
10001	21923562	SP	3	P	zu
10001	21923579	SP	1	Y	zu
10001	21923586	SP	4	P	zu
10001	21923586	SP	1	P	zu
10001	21923586	SP	1	P	zu
10001	21923586	SP	2	P	zu
10001	21950131	SP	1	AP	PBS
10001	21950131	SP	9	AP	PBS
10001	21950131	SP	1	AP	PBS
10001	21950131	SP	1	AP	PBS
10001	21963148	SP	1	AP	PBS
10001	21965296	SP	1	AP	PBS
10001	21965296	SP	1	AP	PBS
10001	21965296	SP	5	AP	PBS
10001	21965296	SP	2	AP	PBS
10001	21965296	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	2	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	21965302	SP	3	AP	PBS
10001	21965302	SP	1	AP	PBS
10001	22005045	SP	1	AP	PBS
10001	22005052	SP	1	AP	PBS
10001	22005052	SP	4	AP	PBS
10001	22005052	SP	1	AP	PBS
10001	22005069	SP	1	AP	PBS
10001	22005076	SP	5	AP	PBS
10001	22005076	SP	8	AP	PBS
10001	22005083	SP	2	AP	PBS
10001	22005083	SP	2	AP	PBS
10001	22005083	SP	1	AP	PBS
10001	22005083	SP	1	AP	PBS
10001	22005083	SP	1	AP	PBS
10001	22005090	SP	1	AP	PBS
10001	22005090	SP	4	AP	PBS
10001	22005090	SP	3	AP	PBS
10001	22005106	SP	3	AP	PBS
10001	22005106	SP	2	AP	PBS
10001	22005106	SP	1	AP	PBS
10001	22005106	SP	1	AP	PBS
10001	22005137	SP	2	AP	PBS
10001	22005137	SP	6	AP	PBS
10001	22005144	SP	1	AP	PBS
10001	22005144	SP	2	AP	PBS
10001	22005144	SP	2	AP	PBS
10001	22005144	SP	1	AP	PBS
10001	22009036	SP	1	AP	PBS
10001	22009036	SP	1	AP	PBS
10001	22009036	SP	2	AP	PBS
 
Als ik jouw gegevens in een tabel plak, komt er een prima totaaltje uitrollen:

Groep CountOfpal nr SumOfship
PBS 52 101
Tra 5 8
vl 10 12
zu 16 23

Of zoek je dit niet?
 
Als ik jouw gegevens in een tabel plak, komt er een prima totaaltje uitrollen:

Groep CountOfpal nr SumOfship
PBS 52 101
Tra 5 8
vl 10 12
zu 16 23

Of zoek je dit niet?


Michel,

Het resultaat zou moeten zijn:
Groep pal nr
PBS 14
Tra 2
vl 3
zu 5

In uw SQL worden dus ook de pal nr per record geteld en dat is niet wat ik nodig heb.
De som is wel correct maar dat had ik al gevonden, ik had ook geprobeerd met een distinct Count maar dat is een brug te ver voor mij.
Groetjes,
Ambertje
 
Laatst bewerkt:
Op basis waarvan kom je tot jouw cijfers?
 
Op basis waarvan kom je tot jouw cijfers?


Michel,
Als je [Groep] vl bekijkt zie je dat deze groep 10 records heeft en dat staat ook in jouw schemaatje.
Maar deze 10 records bevatten maar 3 verschillende [pal nr],
21923470
21923487
21923500

Dat is waar ik naar op zoek ben, per [Groep] het aantal [pal nr] en niet het aantal records.

Groetjes,
Ambertje
 
Dus je wilt dit zien?

Groep Aantal Pal nrs CountOfpal nr SumOfship
PBS 14 52 101
Tra 2 5 8
vl 3 10 12
zu 5 16 23
 
Met een paar (redelijk flauwe) extra hulpqueries.... De eerste is deze:
[SQL]SELECT DISTINCT Groep, [pal nr] FROM Qry_Determinatie_PBL_PBS[/SQL]

Deze levert de unieke records op voor elke groep.

Vervolgens maak je daar een nieuwe op:
[SQL]SELECT Groep, Count(Query2.[pal nr]) AS [Aantal Pal nrs] FROM Query2 GROUP BY Groep[/SQL]

Deze levert de hoeveelheid per groep. (de waarde die je zoekt)
De laatste query koppel je aan de echte query, waarbij je kunt koppelen op Groep. Et voilà....
 
Met een paar (redelijk flauwe) extra hulpqueries.... De eerste is deze:
[SQL]SELECT DISTINCT Groep, [pal nr] FROM Qry_Determinatie_PBL_PBS[/SQL]

Deze levert de unieke records op voor elke groep.

Vervolgens maak je daar een nieuwe op:
[SQL]SELECT Groep, Count(Query2.[pal nr]) AS [Aantal Pal nrs] FROM Query2 GROUP BY Groep[/SQL]

Deze levert de hoeveelheid per groep. (de waarde die je zoekt)
De laatste query koppel je aan de echte query, waarbij je kunt koppelen op Groep. Et voilà....

Bedoel je met echte Query de hoofdquery?
Moet je dat elke keer met omweggetjes doen als je zulke query's wilt maken waar je een dubbel gegeven als 1 gegeven wilt tellen?
 
Ja, met de echte query bedoel ik de query die je als eerste hebt geplaatst. Of het altijd zo moet? op zich niet; je zou een functie kunnen maken die de twee queries in een procedure draait, en de uitkomst terugleest. Maar omdat je een telling op een telling wilt doen, is dit een optie. Misschien dat het met een subquery ook wel kan; dat heb ik nog niet geprobeerd te maken. Maar dit is relatief snel gemaakt. En de hulpqueries kun je onzichtbaar maken; dan raak je ze ook niet meer kwijt.
 
Ja, met de echte query bedoel ik de query die je als eerste hebt geplaatst. Of het altijd zo moet? op zich niet; je zou een functie kunnen maken die de twee queries in een procedure draait, en de uitkomst terugleest. Maar omdat je een telling op een telling wilt doen, is dit een optie. Misschien dat het met een subquery ook wel kan; dat heb ik nog niet geprobeerd te maken. Maar dit is relatief snel gemaakt. En de hulpqueries kun je onzichtbaar maken; dan raak je ze ook niet meer kwijt.


Bedankt Michel,

Het resultaat klopt nu maar ik snap niet wat je bedoelt met "De laatste query koppel je aan de echte query, waarbij je kunt koppelen op Groep. Et voilà.... " bedoelt.

Nu heb ik per groep het effectieve aantal palletten maar ik wil dit ook onderverdeeld zien per [Store].
Dus niet enkel per [groep] maar ook nog eens onderverdeeld per [store], dit kan misschien met een subquery maar dat heb ik nog nooit gedaan.

Groetjes,
Ambertje
 
Laatst bewerkt:
Ik heb de uitwerking even in een voorbeeldje gezet. De query [qTotaalOverzicht] is 'm. De tijdelijke queries heten [qTemp1] en [qTemp2].
 
Ik heb de uitwerking even in een voorbeeldje gezet. De query [qTotaalOverzicht] is 'm. De tijdelijke queries heten [qTemp1] en [qTemp2].

Michel ik snap het eindelijk :d dat voorbeeldje doet wonderen.
Helaas zie ik nu een probleem dat zich in het voorbeeld niet voordeed:

We kunnen nu de palletten ontdubbelen en daarbij het aantal optellen maar per pal kunnen er ook verschillende [groep] zijn.
Een pallet mag maar in 1 groep geteld worden anders zijn de resultaten foutief.

vb (ik heb dit effe zelf gemanipuleerd om het een beetje te verduidelijken):
[cust] [pal nr] [rc] [ship] [flowthru type] [Groep]
10001 21923487 CW 1 B zu
10001 21923487 SP 1 G zu
10001 21923487 SP 1 G zu
10001 21923487 SP 1 G Tra
10001 21923487 SP 1 G vl

Dit is een veel voorkomend probleem omdat bepaalde groepen samen worden behandeld als het volume te klein is. (dat werd berekend in een andere kanjer van een DB)

We zien nu dus 1 dezelfde [pal nr] voor 3 verschillende [Groep] en eigenlijk mag dit niet.

Ik zou dus adhv een Iif (als dit mogelijk is) willen zeggen dat deze [pal nr] het meeste voorkomt in [Groep] zu en dan alleen daar meegeteld mag worden en niet meer in [Groep] vl en Tra.
Het zou dus ook kunnen dat de [pal nr] evenveel voorkomt in [Groep] zu als [Groep] vl In dit geval moet de [pal nr] bij [Groep] zu komen (dit is de meest voorkomende [Groep]). Idem voor de andere [Groep]

Sorry Michel, ik had dit te laat opgemerkt tussen de 10 duizenden records.
Hopelijk kan dit nog makkelijk geïntegreerd worden tussen de Qeury's die je voor mij hebt opgesteld? In ieder geval kan ik bovenstaande oplossing voor andere dingen db gebruiken.

Kun je mij bij dit onverwachte probleem nog met raad bijstaan om dit op te lossen aub?

Groetjes,
Ambertje
 
Laatst bewerkt:
Eerst maar eens een nieuw teiltje bestellen :(
 
Zonder voorbeeldgegevens zodat ik het probleem kan reproduceren heb ik geen flauw idee wat je bedoelt vrees ik; het is mijn materie uiteraard niet, dus ik zou niet weten wat ik naar zou moeten zien. Als je wat betere gegevens hebt, kan ik kijken of ik het kan reproduceren. Vaak is dat al de helft van de oplossing.
 
Zonder voorbeeldgegevens zodat ik het probleem kan reproduceren heb ik geen flauw idee wat je bedoelt vrees ik; het is mijn materie uiteraard niet, dus ik zou niet weten wat ik naar zou moeten zien. Als je wat betere gegevens hebt, kan ik kijken of ik het kan reproduceren. Vaak is dat al de helft van de oplossing.


Michel,

Het probleem is te complex om uit te leggen (kan het zelfs niet meer verwoorden) dus kan ik onmogelijk u daarmee lastig vallen.
Ik ga dit topic afsluiten want in 1ste instantie heb je me verder op weg geholpen met mijn oorspronkelijk probleem en hier ben ik al ontzettend blij mee.

Als ik nog een vraagje heb zal ik wel een nieuw draadje aanmaken.
Bedankt voor alle hulp ;)

Groetjes,
Ambertje
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan