Toon posts:

SQL probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Weet iemand hoe ik de volgende vraag kan oplossen in Access?

Vraag:
Geef een overzicht van alle patiënten die tijdens 1 van hun opnames meer dan 2 verschillende apotheekartikelen hebben gebruikt. Laat naast het patiëntnummer ook zien welke opname het betreft (opnamedatum, afdeling en ontslagdatum).

tblOpname bestaat uit:

patientnr, opnamedag, afdeling en ontslagdatum.

tblMedicatie bestaat uit:

patientnr, opnamedag en apotheekartikel.


Het volgende heb ik zelf geprobeerd:

SELECT OP.patientnr, OP.opnamedag, OP.afdeling, OP.ontslagdatum
FROM tblOpname AS OP
WHERE OP.patientnr IN

(SELECT ME.patientnr
FROM tblMedicatie AS ME
GROUP BY ME.patientnr
HAVING COUNT(ME.patientnr) >= 2)

AND OP.opnamedag IN

(SELECT ME.opnamedag
FROM tblMedicatie AS ME
GROUP BY ME.opnamedag
HAVING COUNT (ME.opnamedag) >= 2)
ORDER BY OP.patientnr;


Maar nou kijkt hij wel of er 2 dezelfde patientnummers zijn in de tblMedicatie, maar hij kijkt niet of van die zelfde patientnummers de opnamedag ook hetzelfde zijn, en dat moet ik hebben, dus er moeten 2 dezelfde patientnummers zijn en hierbij ook dezelfde opnamedagen.

Ik hoop dat iemand me kan helpen.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 26-08 21:52
Misschien moet je een join gebruiken :?

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Pfff, je queries zijn beetje moeilijk leesbaar zonder code-tags. :)
Je moet in je subquery ook je opnamedag opnemen in de GROUP BY en dan kun je je laatste subquery wegknikkeren.

Never underestimate the power of


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

code:
1
2
3
4
5
6
7
SELECT * 
FROM tblOpname 
    INNER JOIN tblMedicatie 
    ON tblMedicatie.patientnr = tblOpname.patientnr 
WHERE 1 < (SELECT count(tblMedicatie.patientnr) 
        FROM tblMedicatie 
        ORDER BU patientnr)

Zoiets??

Ik weet niet hoe je tabellen in elkaar zitten, maar dit zal een aardig eindje in de buurt komen.

| Life is a game (and games are fun) | homepage |


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
akakiwi schreef op 11 oktober 2002 @ 14:15:
code:
1
2
3
4
5
6
7
SELECT * 
FROM tblOpname 
    INNER JOIN tblMedicatie 
    ON tblMedicatie.patientnr = tblOpname.patientnr 
WHERE 1 < (SELECT count(tblMedicatie.patientnr) 
        FROM tblMedicatie 
        ORDER BU patientnr)

Zoiets??

Ik weet niet hoe je tabellen in elkaar zitten, maar dit zal een aardig eindje in de buurt komen.
Huh? Volgens mij heb jij het inderdaad niet helemaal door hoe de tabellen in elkaar zitten. :)
In de subquery ontbreekt een filter op patientnr en ook kijkt ie niet naar de opnamedag. Verder levert deze query te veel records op wegens je join tussen tblOpname en tblMedicatie. Kun je inderdaad distinct doen, maar dan moet je geen velden selecteren uit tblMedicatie, want dan werkt de distinct niet meer zoals je wil. Daardoor wordt de join op tblMedicatie dus ook vrij zinloos.
Ik geloof dat ik beter de goeie dingen kan opnoemen. Ben ik eerder klaar. :)

akakiwi: Sorry voor de misschien wat botte reactie, maar als shooter deze query gaat gebruiken klopt er helemaal niets meer van. En de query die hij al gepost heeft, was al bijna af.

Never underestimate the power of


  • Skimmer
  • Registratie: Augustus 2001
  • Laatst online: 02-01 11:03

Skimmer

Inter Arma Enim Silent Leges

code:
1
2
3
4
5
6
7
select Patientnr, opnamedatum, afdeling, OntslagDatum
From tblOpname
Where Patientnr in 
   (select PatientNr, opnamedatum, count(apotheekartikel) as countapo
    from tblmedicatie where countapo >= 2
    Group by Patientnr, OpnameDatum)
Order by Patientnr

Imho zou dit moeten werken.... (of iets in deze richting)

[edit]
Stupid... je moet natuurlijk een patientnummer zien |:(

[edit 3]
Geen id of het nu werkt... :( probeer het eens zou ik zeggen :)

[ Voor 0% gewijzigd door Skimmer op 11-10-2002 14:43 . Reden: het is een puinhoop... |:( ]

In times of war the law falls silent


Verwijderd

Topicstarter
Bedankt allemaal voor de hulp
Dankzij jullie heb ik nu het antwoord, het volgende is het goeie....

SELECT OP.patient, OP.opnamedag, OP.afdeling, OP.ontslagdatum
FROM tblOpname AS OP
WHERE OP.patient IN

(SELECT ME.patient
FROM tblMedicatie AS ME
GROUP BY ME.patient, ME.opnamedag
HAVING COUNT(ME.patient) >= 2)
ORDER BY OP.patient;
Pagina: 1