Access und Subselect

Hallo!

Ich habe in Access eine Abfrage, in der ich per SQL folgendes machen wollte:

SELECT a, b, c, d/(SELECT sum(a) AS summe FROM uvw GROUP BY summe)
FROM xyz
[…];

Allerdings wird mir die Unterabfrage immer im „visuellen“ Erstellungsmodus als Klartext in die jeweilige Spalte eingetragen. Da die kein SQL akzeptiert, ist es klar, daß die Unterabfrage auch nicht ausgewertet wird. Habe ich irgendwo einen Denkfehler, was die prinzipielle Möglichkeit von Unterabfragen angeht?

Hallo,

Ich habe in Access eine Abfrage, in der ich per SQL folgendes
machen wollte:

SELECT a, b, c, d/(SELECT sum(a) AS summe FROM uvw GROUP BY
summe)
FROM xyz

verstehe nicht, WAS Du da (mit der Unterabfrage) machen wolltest.

Allerdings wird mir die Unterabfrage immer im „visuellen“
Erstellungsmodus als Klartext in die jeweilige Spalte
eingetragen.

das ist normal.

Da die kein SQL akzeptiert,

Wer sagt das?

ist es klar, daß die
Unterabfrage auch nicht ausgewertet wird.

kommt eine Fehlermeldung? Vermutlich: „Kann nur einen Datensatz zurückgeben“.

Habe ich irgendwo
einen Denkfehler, was die prinzipielle Möglichkeit von
Unterabfragen angeht?

Nein, nicht im Prizip, nur in der Ausführung der Unterabfrage. Die liefert für jeden DS der Hauptabfrage ein ganze Liste von Summenwerten, mit denen nicht dividiert werden kann. Insofern muß

  1. die Unterabfrage anders gruppieren (die Gruppierung nach der Summe selber versteh ich nicht)

  2. darf nur jeweils einen DS liefern, d. h. es ist ein Kriterium nötig für den „Block“, für den die Summe gebildet werden soll.

SELECT a, b, c, d/(SELECT sum(a) AS summe FROM uvw Where Gruppierungsfeld = „abc“)
FROM xyz

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Spot!

SELECT a, b, c, d/(SELECT sum(a) AS summe FROM uvw GROUP BY
summe )

du verwendest geschützte Wörter!!

Grüße aus Schönberg (Lübeck)
Wolfgang
(Netwolf)

Vielen Dank Euch beiden! Auf geschützte Wörter weist mich Access ja hin, das „summe“ hab ich hier nur als Beispiel angegeben. Stattdessen hätte ich besser „ghi“ schreiben sollen :smile:
Trotzdem danke für den Hinweis.
Bezwecken möchte ich damit, daß ein Element jeweils durch die Summe der Spalten einer anderen Relation geteilt wird. Allerdings will ich nicht extra dafür eine eigene Abfrage erstellen, sondern das in einem Schritt erledigen.

Hallo,

Bezwecken möchte ich damit, daß ein Element jeweils durch die
Summe [i]einer Spalte[/b] einer anderen Relation geteilt wird.

dann so:

SELECT xyzID, b, c, d/(SELECT sum(a) AS summe FROM uvw Where FKxyzID = xyz.ID)
FROM xyz

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Bezwecken möchte ich damit, daß ein Element jeweils durch die
Summe [i]einer Spalte[/b] einer anderen Relation geteilt wird.

dann so:

SELECT xyzID, b, c, d/(SELECT sum(a) AS summe FROM uvw Where
FKxyzID = xyz.ID)
FROM xyz

Das würde mir aber nicht die Summe aller a ausgeben, sondern nur den Wert einer Zeile in der Tabelle (für die FKxyzID = xyz.ID gilt), oder?

Grüße,
Spot

Hallo,

.sondern nur den Summen- Wert aller Zeilen in der Tabelle (für die FKxyzID = xyz.ID gilt)

das sind dann genau die Zeilen (Datensätze) die mit dem entspr. DS in der Haupttabelle über die Schlüsselfelder in Beziehung stehen/verknüpft sind.

Dabei ist „FKxyzID“ der Fremdschlüssel in Tabelle2, der den Wert des Primärschlüsselfeldes („ID“) in Tabelle1 besitzt.

Ich nehme mal an, es dreht sich hier um eine korrekte 1:n- Beziehung zwischen zwei Tabellen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Mein Gedanke war, das ganze ohne Fremdschlüssel zu lösen. Es sollen aus der 2. Tabelle alle Einträge eines Attributs summiert werden und in der anderen Tabelle als Teiler verwendet werden.

Quasi:

abc (a1, a2, a3)

def (d1, d2, d3)

Abfrage:

ghi (a1, a2, a3/Summe_aller(d3))

Das wird mir immer obskurer.

Wenn Du keine Fremdschlüssel hast, dann benutz eben einen anderen Kriteriumswert, der die zu summierenden DS(-Werte) kennzeichnet. Fakt ist, daß die Unterabfrage nur EINEN Summenwert liefern , also nicht (nur) gruppiert sein darf.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]