Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Ms Access] SQL query problemen

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

  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
Ik wil een query opstellen waarin ik alle onvoldoendes+voldoendes optel (COUNT) met gebruik van een IIF statement.

Ik heb de volgende code, maar het lukt me maar niet om een count statement te gebruiken in combinatie met een IIF statement. Wat kan ik doen?

SQL:
1
2
3
SELECT DISTINCT examens.examcode, vakken.vakcode, vakken.vaknaam, iif(resultaat <= 5.5, 'Onvoldoende', 'Voldoende') AS Uitslag
FROM examens, vakken, exresult
WHERE exresult.examcode = examens.examcode AND vakken.vakcode = examens.vakcode

[ Voor 21% gewijzigd door RobIII op 13-12-2007 15:21 . Reden: Code tags toegevoegd ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 20-11 22:59

Janoz

Moderator Devschuur®

!litemod

Count telt het aantal records. Aangezien je alle records (voldoende en onvoldoende) terug geeft telt hij ook alle records. Wil je in 1 query de voldoendes en onvoldoendes tellen dan kun je beter naar sum kijken. De iif verander je dan naar eentje die een 1 of 0 terug geeft, en hier zet je een sum omheen om al die 1tjes bij elkaar op te tellen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Dido
  • Registratie: Maart 2002
  • Laatst online: 15:47

Dido

heforshe

Los van je eigenlijke vraag (daar geeft Janoz een flinke duw in de goede richting): je impliciete joins zijn lastig te lezen, en volgen mij zit je met een cartesisch product.
De tabel student wordt zonder condities gejoined. Weet je zeker dat dat de bedoeling is?

Wat betekent mijn avatar?


  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
Dido schreef op donderdag 13 december 2007 @ 10:29:
Los van je eigenlijke vraag (daar geeft Janoz een flinke duw in de goede richting): je impliciete joins zijn lastig te lezen, en volgen mij zit je met een cartesisch product.
De tabel student wordt zonder condities gejoined. Weet je zeker dat dat de bedoeling is?
Joins heb ik dmv Oracle manier gedaan (werk tevaak in Oracle).
Ik moet student hier zelfs weglaten heb alleen
Examencode, Vakcode, Vaknaam, Onvoldoende en Voldoende nodig :)

[ Voor 6% gewijzigd door coktatli op 13-12-2007 11:34 ]


  • ATS
  • Registratie: September 2001
  • Laatst online: 29-10 18:37

ATS

Kan je geen count gebruiken in combinatie met Group By op je voldoende/onvoldoende waarde?

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
ATS schreef op donderdag 13 december 2007 @ 12:05:
Kan je geen count gebruiken in combinatie met Group By op je voldoende/onvoldoende waarde?
Dat had ik gedaan maar wist niet wat ik met IIF moest doen onder group by, maar dat is nu gelukt met onderstaande code

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT DISTINCT examens.examcode,
vakken.vakcode, vakken.vaknaam, 
COUNT (iif(resultaat < 5.5, 'Ja','Nee')) AS Onvoldoende

FROM
          examens, 
          vakken, 
          exresult

WHERE exresult.examcode = examens.examcode AND 
             vakken.vakcode = examens.vakcode
GROUP BY examens.examcode, vakken.vakcode, vakken.vaknaam, iif(resultaat < 5.5, 'Ja', 'Nee')


Alleen krijg ik nu als uitslag totaal (dus niet voldoende apart en onvoldoende apart opgeteld, wat ik wil weer bereiken hmmm).

[ Voor 4% gewijzigd door RobIII op 13-12-2007 15:20 ]


  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
Het is met uiteindelijk gelukt met onderstaande code:
SQL:
1
2
3
4
SELECT examens.EXAMCODE, vakken.VAKCODE, vakken.VAKNAAM, Sum(IIf([resultaat]<5.5,1,0)) AS Onvoldoende, Sum(IIf([resultaat]>=5.5,1,0)) AS Voldoende
FROM examens, vakken, exresult
WHERE (((exresult.EXAMCODE)=[examens].[examcode]) AND ((vakken.VAKCODE)=[examens].[vakcode]))
GROUP BY examens.EXAMCODE, vakken.VAKCODE, vakken.VAKNAAM;

[ Voor 1% gewijzigd door RobIII op 13-12-2007 15:19 . Reden: Code tags toegevoegd ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Doe me een lol; als je code (of SQL queries) post; gebruik dan code tags.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Mammon
  • Registratie: December 2006
  • Laatst online: 05-11 15:25
Vraagje: HU, informatica?
Ik maak namelijk voor dit project ook een cijfersysteem

  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
RobIII schreef op donderdag 13 december 2007 @ 15:19:
Doe me een lol; als je code (of SQL queries) post; gebruik dan code tags.
Bedankt!

  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT DISTINCT 
student.studnr AS Studentnummer, 
student.naam AS Achternaam, 
student.voornaam AS Voornaam, 
COUNT (*) AS TOTAAL_BEHAALD, 
AVG(resultaat)AS GEMIDDELDE

FROM
student, 
exresult

WHERE 
resultaat >= 5.5 AND 
student.studnr= exresult.studnr

GROUP BY 
student.studnr,
student.naam, 
student.voornaam

HAVING COUNT (*) > 1


Ik heb weer een ander probleem....
Het overzicht toont het aantal behaalde examens en daarbij het gemiddelde examenresultaat over uitsluitend deze behaalde examens (>5.5) van de studenten die méér dan één vak het examen gehaald hebben (> 5.5).

Maar ik moet het volgende hebben:
Het overzicht moet het aantal behaalde examens tonen en daarbij het gemiddelde examenresultaat over alle examens (dus inclusief onvoldoendes) van de studenten die méér dan één vak het examen gehaald hebben (> 5.5).

Iemand die weet hoe dit moet? Ben al uren hiermee bezig 8)7

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 25-10 14:28
Je wilt dus het hoogste cijfer per groep van examens boven de 5.5 hebben en niet per examen.

  • coktatli
  • Registratie: Maart 2003
  • Laatst online: 13-11 08:59
_js_ schreef op dinsdag 18 december 2007 @ 15:54:
Je wilt dus het hoogste cijfer per groep van examens boven de 5.5 hebben en niet per examen.
Ik moest per persoon die >1 tentamen had gehaald de gemiddelde uitrekenen over al zijn tentamens (voldoendes+onvoldoendes ipv alleen zijn voldoendes). Moest een subquery erin bouwen :)

Maar ik heb het al opgelost dank je wel!

SQL:
1
2
3
4
5
6
7
8
9
SELECT AVG(resultaat) AS gemiddelde, naam, voornaam,SUM( IIF(resultaat>5.5,1,0)) AS aantal
FROM student AS s, exresult AS e
WHERE s.studnr=e.studnr AND e.studnr IN
(SELECT e.studnr
FROM student AS s, exresult AS e
WHERE s.studnr=e.studnr AND resultaat>5.5
GROUP BY e.studnr
HAVING COUNT(examcode)>1)
GROUP BY e.studnr, naam, voornaam;

[ Voor 13% gewijzigd door coktatli op 19-12-2007 09:25 ]


Verwijderd

RobIII schreef op donderdag 13 december 2007 @ 15:19:
Doe me een lol; als je code (of SQL queries) post; gebruik dan code tags.
En doe mij een lol en maak die code tags ook eens goed in IE 7... Te lange code wordt afgebroken.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 25 december 2007 @ 00:52:
[...]
En doe mij een lol en maak die code tags ook eens goed in IE 7... Te lange code wordt afgebroken.
Daar zijn de scrollbalken voor uitgevonden en het pijltje Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/admin_open.gif kun je klikken om de code uit te klappen zodat je niet hoeft te scrollen.

Verder zitten we hier niet te wachten op nutteloze kicks van 6 dagen als ze niets toevoegen aan het topic en al helemaal niet als we gaan zitten betweten en flauw doen.

[ Voor 3% gewijzigd door RobIII op 25-12-2007 04:09 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1