[Access] Rekenen in query

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

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
In een tabel staan "waarde" en "minimale waarde"
In een andere tabel staat "uitgaande waarde". Het is mogelijk dat hetzelfde artikel meerdere malen een "uitgaande waarde" krijgt.
Ik wil nu alle record selecteren waarvoor geld: "minimale waarde >= "waarde" - "uitgaande waarde"
In het geval van "waarde" = 18 ; "minimale waarde" = 6 en "uitgaande waarde" = 6 en komt twee keer voor. (12 in totaal dus) komt de query niet met het record, terwijl als "uitgaande waarde" = 12 wordt het record wel geselecteerd.
Heeft iemand een idee om de Build Criteria zo aan te passen dat de query door zoekt naar meerdere records en deze ook van "waarde" af trekt???

There is no beast without cruelty, Friedrich Nietzsche


Verwijderd

Heb je al een query? Kun je deze posten? Wellicht ook handig om de velden van de tabellen te posten.

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
Sure

Tabel 1 Sample met o.a. de velden:
|Sample_ID (key)|SAP_No|Charge_No|Productnaam|Sample_Grootte|Minimale_Grootte en nog wat meer meuk

Tabel2 Aanvraag
|Aanvraag_ID (key)|Sample_ID|Sample_Verbruikt| met nog weer wat meer

Sample_ID in tabel 1 komt maar een keer voor, en in Tabel 2 kan het vaker voorkomen. De twee tabellen zijn gelinkt op Sample_ID (DOH!!)
De WHERE statement in de query gaat als volgt:
WHERE (((Sample.Minimale_Grootte)>=[Sample]![Sample_Grootte]-[Aanvraag]![Sample_Verbruikt]));

There is no beast without cruelty, Friedrich Nietzsche


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

volgens mij bedoel je zoiets als dit:
code:
1
2
3
4
5
6
7
8
9
select p.product_naam
      ,p.minimale_waarde
      ,p.waarde
      ,sum(b.uitgaande_waarde)
from   product p
      ,bestelling b
where  p.id = b.id
group by p.*
having  p.minimale_waarde >= p.waarde - sum(b.uitgaande_waarde)


Ik ben er even vanuit gegaan dat het een voorraadmanagement systeem is en dat uitgaande_waarde de bestellingen zijn die nog geleverd moeten worden, waarde de huidige voorrraad is en minimale_waarde de limiet is waarbij een nieuwe inkoop wordt gedaan. Is het zoiets?

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
Euh... ja in de praktijk niet hetzelfde, maar het werkt wel +/- hetzelfde. Thanx, ff proberen, heb de Having nog niet echt eerder geprobeerd :)
* Triple beetje meer noober dan gedacht :)

There is no beast without cruelty, Friedrich Nietzsche


  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
OEI cant have aggregate function in where clause
De complete SQL statement zegt nu dit :

SELECT Sample.SAP_No, Sample.Charge_No, Sample.Productnaam, Sample.Sample_Grootte, Sample.Minimale_Grootte, Sample.Eenheid, Sample.Dispose_Periode, Sample.Gebouw_No, Sample.Kamer_No, Sample.Rek_No

FROM Sample INNER JOIN Aanvraag ON Sample.Sample_ID = Aanvraag.Sample_ID

WHERE ((([Sample]![Minimale_Grootte])>=[Sample]![Sample_Grootte]-Sum([Aanvraag].[Sample_Verbruikt])));

having wordt dus niet in de statement opgenomen terwijl ik die er wel in heb getiept

There is no beast without cruelty, Friedrich Nietzsche


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Geef je ingetikte statement dan eens.

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
Jah, die heeft access dus creatief omgesleuteld naar het bovenstaande

There is no beast without cruelty, Friedrich Nietzsche


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Zoiets dan
code:
1
2
3
4
5
6
7
8
9
select p.product_naam
      ,p.minimale_waarde
      ,p.waarde
from   product p
where  p.minimale_waarde - p.waarde <
      (select sum(b.uitgaande_waarde)
       from   bestelling b
       where  p.id = b.id
      )

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
En hier zit nog een sintax error in
code:
1
2
3
4
5
6
7
8
9
SELECT Sample.SAP_No, Sample.Charge_No, Sample.Productnaam,
Sample.Sample_Grootte, Sample.Minimale_Grootte, Sample.Eenheid,
Sample.Dispose_Periode, Sample.Gebouw_No, Sample.Kamer_No, Sample.Rek_No

FROM Sample INNER JOIN Aanvraag ON Sample.Sample_ID = Aanvraag.Sample_ID

WHERE ((([Sample]![Minimale_Grootte])>=[Sample]![Sample_Grootte] - (SELECT
SUM(Aanvraag.Sample_Verbruikt) FROM Aanvraag WHERE  Aanvraag.Sample_ID =
Sample.Sample_ID);

There is no beast without cruelty, Friedrich Nietzsche


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT Sample.SAP_No
      ,Sample.Charge_No
      ,Sample.Productnaam
      ,Sample.Sample_Grootte
      ,Sample.Minimale_Grootte
      ,Sample.Eenheid
      ,Sample.Dispose_Periode
      ,Sample.Gebouw_No
      ,Sample.Kamer_No
      ,Sample.Rek_No
FROM   Sample
WHERE  [Sample]![Minimale_Grootte] - [Sample]![Sample_Grootte] <
      (SELECT SUM(Aanvraag.Sample_Verbruikt)
       FROM   Aanvraag
       WHERE  Aanvraag.Sample_ID = Sample.Sample_ID
      );

zo dus.
Lekker leest dat hè, als iemand het formatteert. :X

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
WOOOOT Zo werkt het inderdaad!! Wel weer raar dat Access vanzelf een innerjoin in de statement opneemt terwijl het zonder, zoals in jou voorstel, prima werkt!! Nu is het probleem helemaal opgelost! many, many thanx _/-\o_

There is no beast without cruelty, Friedrich Nietzsche


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Dit is dan ook geen join, maar een gecorreleerde subquery. (gecorreleerd betekent dat waarde van records uit de hoofdquery worden gebruikt in de subquery)

  • Triple
  • Registratie: Mei 2000
  • Laatst online: 20-05-2025
Kijk, ik heb toch echt het gevoel dat ik wat geleerd heb. Ik ga direct eens kijken of ik dit principe verder nog kan toepassen.

There is no beast without cruelty, Friedrich Nietzsche

Pagina: 1