[SQL/Access] Dynamische selectie-query

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

  • giveupthejoost
  • Registratie: Maart 2006
  • Laatst online: 21-03-2016
Momenteel ben ik bezig met een database-applicatie in MS-Access, en ik zit even vast;

Dit is de situatie:

TABEL FASE
fase_id
fase_naam

TABEL ACTIVITEIT
activiteit_id
activiteit_naam

TABEL VOLDAAN
fase_id
activiteit_id
voldaan

Ik wil een selectiequery die voor elke fase_id de activiteit weergeeft en of die activiteit voldaan is of niet.

Dus iets als:

(activiteitnaam), (voldaan met fase_id 1), (voldaan met fase_id 2), (voldaan met fase_id x)

Ik heb geen flauw idee in welke richting ik moet zoeken hoe zoiets te genereren.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Zoek eens op JOINS.

https://fgheysels.github.io/


  • giveupthejoost
  • Registratie: Maart 2006
  • Laatst online: 21-03-2016
Ja, precies, in die richting zat ik ook al te denken, maar wat zet ik dan in de SELECT..??

Het idee is dat je een soort checklist krijgt voor de activiteiten in verschillende fasen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Wat zet je in de SELECT ? Snor eens een SQL tutorial op, en lees die eens ?

Als je alles op één rij wilt krijgen, dan zal je er trouwens met SQL alleen niet geraken. SQL is er om data op te halen en te manipuleren; als je die opgehaalde data dan in een bepaald formaat wilt tonen, dan zal je dat 'client-side' moeten doen; in jouw geval met VBA.

https://fgheysels.github.io/


  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 01-12 15:52

Jaspertje

Max & Milo.. lief

SELECT alles wat je wil weten FROM tabel 1 INNER JOIN tabel 2 ON tabel1.PK = tabel2.FK WHERE alles waar het aan moet voldoen

zoiets

[ Voor 10% gewijzigd door Jaspertje op 10-05-2007 15:45 ]


  • giveupthejoost
  • Registratie: Maart 2006
  • Laatst online: 21-03-2016
Ik begrijp hoe een JOIN werkt, en heb wat basiskennis van SQL. Maar momenteel in mijn situatie levert de client-side applicatie een soort editor voor Access queries. Oftewel, wat ik daar via een query instop kan ik moeiteloos bewerken, updaten enz enz. Het zou superpractisch zijn als het in deze situatie op deze manier zou werken.

Uit de reactie van whoami begrijp ik dat dit middels Access/SQL niet mogelijk is. De client-side applicatie bewerken is op het moment geen optie, dus dan moet ik naar een oplossing in een andere hoek zoeken.

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
als x bekend is is het nog wel te doen... kan een grote query worden, maar kan wel... als x kan wisselen van waarde, dan zul je naar een dynamische opbouw van de query moeten, voordat je de query daadwerkelijk opbouwt... zoals gezegd is dat in Access dus VBA

  • giveupthejoost
  • Registratie: Maart 2006
  • Laatst online: 21-03-2016
Edwardvb schreef op donderdag 10 mei 2007 @ 16:34:
als x bekend is is het nog wel te doen... kan een grote query worden, maar kan wel... als x kan wisselen van waarde, dan zul je naar een dynamische opbouw van de query moeten, voordat je de query daadwerkelijk opbouwt... zoals gezegd is dat in Access dus VBA
Ja precies, dat bedoel ik :) Ik heb helaas nog nooit in VBA iets gedaan, en morgen een deadline. Dus in die hoek kan ik het nu gewoon niet zoeken, kost me te veel tijd. X is trouwens bekend, het aantal fasen staat als waarde in een configuratie-tabel. en is natuurlijk op te vragen met COUNT(*).

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
misschien kun je iets met de PIVOT functie... heb hem zelf nooit gebruikt, maar misschien is het wat?

http://www.blueclaw-db.com/accessquerysql/pivot_query.htm#

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Als voorbeeld, mag je het zelf verder uitzoeken ;)

SQL:
1
2
3
4
5
6
7
TRANSFORM Sum([voldaan].[voldaan]) AS SumVoldaan
SELECT activiteit.naam
FROM (activiteit
left join voldaan on activiteit.activiteit_id = voldaan.activiteit_id)
left join fase on fase.fase_id = voldaan.fase_id
GROUP BY activiteit.naam
PIVOT fase.naam

[ Voor 11% gewijzigd door P.O. Box op 11-05-2007 10:24 ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
giveupthejoost schreef op donderdag 10 mei 2007 @ 16:43:
[...]


Ja precies, dat bedoel ik :) Ik heb helaas nog nooit in VBA iets gedaan, en morgen een deadline.
en dan is het jammer dat je zo'n topic in de steek laat na deze post en daardoor nu misschien onwijs hebt lopen stressen voor die deadline... althans, dat gok ik zo :)

  • giveupthejoost
  • Registratie: Maart 2006
  • Laatst online: 21-03-2016
Edwardvb schreef op zaterdag 12 mei 2007 @ 13:33:
[...]
en dan is het jammer dat je zo'n topic in de steek laat na deze post en daardoor nu misschien onwijs hebt lopen stressen voor die deadline... althans, dat gok ik zo :)
Inderdaad, heb vrijdag inderdaad tamelijk zitten stressen :) maar wat uitstel kunnen fixen om het probleem bij de kladden te kunnen grijpen.

Die methode die je aandroeg werkt inderdaad perfect, superbedankt! Om het maar even in Access terminologieen te verklaren: het is een zgn. kruistabel.

Ik heb even de query waarmee ik het uiteindelijk heb kunnen oplossen gepost:

SQL:
1
2
3
4
5
6
TRANSFORM Sum(tblVoldaan.act_checked) AS SomVanChecked
SELECT tblActiviteit.act_titel
FROM (tblActiviteit LEFT JOIN tblVoldaan ON tblActiviteit.act_id = tblVoldaan.act_id) 
LEFT JOIN tblFase ON tblVoldaan.fase_id = tblFase.fase_id
GROUP BY tblActiviteit.act_titel
PIVOT tblFase.fase_titel;


Daarmee verliest de query door zijn type de bewerkt-functionaliteit wel, maar daar kunnen we hier in dit geval wel een andere oplossing voor vinden.

[ Voor 0% gewijzigd door giveupthejoost op 14-05-2007 11:08 . Reden: typo's in query ]


  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
mooi dat je toch nog wat met de oplossing kan... dat doet me goed ;)
Pagina: 1