Zufallszahlen in einer Abfrage

13/11/2008 - 15:38 von Andre | Report spam
Hallo,

ich möchte Zufallszahlen in einer Abfrage verwenden, dabei benutze ich die
ZZG Funktion. Das Ziel ist es, von einer Zahl eine Zufallszahl abzuziehen.

Das Problem ist, dass die ZZG-Funktion beim Ausführen der Abfrage nur eine
Zahl generiert und sie dann bei jedem Datensatz verwendet.

Wie kann ich die ZZG-Funktion bei jedem Datensatz eine Zahl generieren lassen?
Kann ich mein Ziel auch anders erreichen?
 

Lesen sie die antworten

#1 Thomas Winkler
13/11/2008 - 16:06 | Warnen spam
Hi,

Das Problem ist, dass die ZZG-Funktion beim Ausführen der Abfrage nur eine
Zahl generiert und sie dann bei jedem Datensatz verwendet.



Problem ist hier, dass der Query-Optimizer erkennt, dass in jedem DS die
gleiche Funktion gerufen werden soll und darum macht er das nur einmal
und benutzt das Ergebnis n-mal.

Wie kann ich die ZZG-Funktion bei jedem Datensatz eine Zahl generieren lassen?
Kann ich mein Ziel auch anders erreichen?



Wenn Deine DS einen numerischen PK haben, dann könntest Du diesen der
ZZG-Funktion übergeben. Damit sieht der Optimizer, dass der Ruf pro DS
unterschiedlich ist, und gibt auch unterschiedliche Zahlen zurück.

Das hat dann allerdings Einfluss auf die Generierung der Zufallszahlen,
da das Spektrum der Zahlen sich damit bei jedem DS veràndert. Dabei
handelt es sich um einen systematischen Fehler, da beim ersten die
Zahlen nur zwischen 0 und 1 generiert werden, beim 2. zwischen 0 und 2 usw.

Alternativ oder besser könntest Du auch eine Funktion drum herum bauen...

Public Function MyZZG(Key as Long) as Long
MyZZG = Rnd() 'hier könnte auch ein Konstanter Parameter übergeben werden
end function

Jetzt benutzt Du anstatt ZZG einfach MyZZG(PrimaryKey) in Deiner Abfrage
und alles is i.O. Wegen dem (eigentlich nicht benutzen) Parameter wird
MyZZG nicht mehr wegoptimiert und führt dennoch das eigentlich
beabsichtigte ZZG *mit* *immer* *gleichem* Spektrum aus.

HTH

Thomas

"Access? Damit arbeite ich nicht. Das ist doch nur ein abgespecktes Excel."

Ähnliche fragen