Toon posts:

[SQL] Meerdere records tellen in MS Access

Pagina: 1
Acties:
  • 429 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Momenteel heb ik een tabel met een kolom meldingen. Bepaalde meldingen komen vaker voor. Nou wil ik d.m.v een query van iedere unieke melding zien hoevaak deze voorkomt in de tabel.

In de tabel staat bijvoorbeeld:

---------------------------------------------
| id | melding
|--------------------------------------------
| 0001 | Kappot
| 0002 | Heel
| 0003 | Heel
| 0004 | Door midden
| 0005 | Verroest
| 0006 | Blaat
| 0007 | Verroest
--------------------------------------------

Nou wil ik na mijnn query hetvolgende zien:

--------------------------------------------
| aantal | melding
|-------------------------------------------
| 1 | Kappot
| 2 | Heel
| 1 | Door midden
| 2 | Verroest
| 1 | Blaat
--------------------------------------------
Ik heb dit geprobeerd met count() en distinct voor de unieke velden.
Echter als ik hetvolgende invoer in Access dan krijg ik de melding dat een subquery maximaal 1 record als resultaat op mag leveren.

code:
1
2
3
SELECT COUNT(meldingen) 
FROM tabel 
WHERE (SELECT DISTINCT(meldingen) FROM tabel);


Heeft iemand een idee hoe ik dit dan uit kan voeren?

  • gorgi_19
  • Registratie: Mei 2002
  • Nu online

gorgi_19

Kruimeltjes zijn weer op :9

Zie http://www.w3schools.com/sql/sql_groupby.asp :)

[ Voor 8% gewijzigd door gorgi_19 op 29-04-2004 15:13 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
hehe great!! Khad me eigenlijk nog nooit afgevraagd waar die group by functie voor was ;)

Resultaat van mijn vraag is geworden:
code:
1
2
3
SELECT DISTINCT (melding) AS Melding, Count(Melding) AS aantal
FROM tabel
GROUP BY Melding;

Verwijderd

Kleine verbetering: DISTINCT kan je weglaten. De GROUP BY zorgt er al voor dat je alleen unieke meldingen in je resultaat terug krijgt.
code:
1
2
3
SELECT Melding, Count(Melding) AS aantal
FROM tabel
GROUP BY Melding;

Verwijderd

Topicstarter
Nou zou ik het graag nog iets uitgebreider willen:
Ik heb die meldingen maar die bestaan uit meerdere gegevens. Zo zijn de gegevens die in de kolom melding staan alsvolgt:
Alarm van 1000 Klantnaam MeldingvanSoort
vb.
Alarm van 1111 Mr. Jansen Pieper
Alarm van 1121 Mr. Janssen Pieper
Alarm van 1441 Mr. Klasen Pieper
Alarm van 1117 Mr. Appel Pieper
Alarm van 1118 Mr. Appel Zender
Alarm van 3117 Mvr. Blaat Zender

Nou kan die tekst pieper verschillen in een 10 tal andere meldingsoorten. Nou zou ik graag per meldingsoort weten hoeveel meldingen er geweest zijn, dit om een grafiek te kunnen maken. Is dit in één query op te vangen?

Dus dat van bovenstaand voorbeeld hetvolgende uitkomt:

Melding | Aantal
------------------------
Zender | 2
Pieper | 4

Ik weet op welke meldingsoorten gezocht moet worden, die staan vast.

[ Voor 4% gewijzigd door Verwijderd op 04-05-2004 10:38 ]


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Dan moet je groeperen op meldingsoort.
Het is trouwens ook wel handig als je even aangeeft welke kolommen er in je tabel zitten.

Never underestimate the power of


  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Verwijderd schreef op 04 mei 2004 @ 10:36:

Alarm van 1111 Mr. Jansen Pieper
Alarm van 1121 Mr. Janssen Pieper
Alarm van 1441 Mr. Klasen Pieper
Alarm van 1117 Mr. Appel Pieper
Alarm van 1118 Mr. Appel Zender
Alarm van 3117 Mvr. Blaat Zender
Dit zou zo in een tabel moeten staan:
code:
1
2
3
4
5
6
7
8
----------------------------------
| 1111 | Mr.  | Jansen  | Pieper |
| 1121 | Mr.  | Janssen | Pieper |
| 1441 | Mr.  | Klasen  | Pieper |
| 1117 | Mr.  | Appel   | Pieper |
| 1118 | Mr.  | Appel   | Zender |
| 3117 | Mvr. | Blaat   | Zender |
----------------------------------


Kolom 2 en 3 mogen desnoods samen.

[ Voor 3% gewijzigd door WimB op 04-05-2004 10:43 ]


Verwijderd

Topicstarter
Het is een logbestand dat ik zo aangeleverd krijg en kan jammer genoeg niet even de kolommen aanpassen anders had ik dat allang gedaan ;)

Ik heb een kolom 'datum', 'tijd', 'nummer' en 'melding'
Maar het gaat hier dus volledig om die kolom melding.
Als ik GROUP BY doe, dan grouped ie alleen diegene waarvan ook de namen enzo gelijk zijn, dus dat is jammer genoeg niet het juiste antwoord :?

@cameodski: Er staat in mijn post wat er in mijn kolom 'melding' staat namelijk:
"Alarm van 1111 Mr. Jansen Pieper"

Zo duidelijker geworden?

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Kan je die logboek dan niet overpompen in een andere tabel waarin die waarden wel gesplitst zijn? Dit lijkt mij de beste oplossing. En dan kan je met die tabel verderwerken.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Verwijderd schreef op 04 mei 2004 @ 11:28:
@cameodski: Er staat in mijn post wat er in mijn kolom 'melding' staat namelijk:
"Alarm van 1111 Mr. Jansen Pieper"

Zo duidelijker geworden?
Ja, het is me helemaal duidelijk. ;)
Je zult dan op een of andere manier de meldingsoort eruit moeten halen en daar op moeten groeperen.
Kan dat niet met een substring functie oid?

Never underestimate the power of


Verwijderd

Topicstarter
Ik ben nou iets uit aan het proberen, namelijk:
- Recordset maken van me tabel
- met instr() controleren op soort melding
- deze dan opslaan in nieuwe kolom
- vervolgens hier een selectie op los laten

Alleen verwacht ik het probleem tegen te komen met de duur van het controleren. Het zijn namelijk zo'n 300.000 regels die gecontroleerd moeten worden dan :?

Ik laat wel weten of dit gelukt is.
Als er andere suggesties zijn, laat ze dan maar komen ;)

Verwijderd

Topicstarter
Oke ik heb net ff uitgeprobeerd een bovenstaande oplossing neemt inderdaad het tijdsprobleem met zich mee... :(

Updaten heb ik geprobeerd met:
code:
1
DoCmd.RunSQL "UPDATE UserMessages SET [type]= 'Handzender' WHERE [ID]= " & rst.ID"

code:
1
dbs.Execute "UPDATE UserMessages SET [type]= 'Handzender' WHERE [ID]= " & rst.ID"


Zo heb ik geprobeerd om mijn zooi te doorlopen. Met dbs.Execute loopt mijn Access vast (waarschijnlijk geheugenprobleempie ;) ) En met de eerste oplossing duurt het enorm lang...

Zou het sneller moeten gaan als ik een string maak met alles dat geupdate moet worden en dan die string in 1 keer uitvoeren?
Pagina: 1