Kreuztabellenafrage ueber Kreuzprodukt

09/12/2008 - 20:09 von Christoph Schneegans | Report spam
Hallo allerseits!

Ich habe zwei Tabellen "Projekte" und "Kostenstellen". Ein Projekt
kann zu 100% einer Kostenstelle zugeordnet sein, aber auch anteilig
mehreren Kostenstellen, wobei die Summe stets 100% ergeben muß. Diese
Zuordnung wird in einer Tabelle "Zuordnungen" gespeichert, über die
also "Projekte" und "Kostenstellen" m:n-verknüpft sind:

ProjektID | KostenstelleID | Anteil
-|--|--
1 | 1 | 100
2 | 1 | 50
2 | 2 | 50
3 | 2 | 20
3 | 3 | 80

Ich möchte nun folgende Ausgabe erhalten, mit den Projekten als
Zeilen- und den Kostenstellen als Spaltenüberschriften:

| 1 | 2 | 3
-
1 | 100 | |
2 | 50 | 50 |
3 | | 20 | 80


Man könnt meinen, daß dieses Problem unmittelbar mit einer
Kreuztabellenabfrage zu erschlagen sei. Nun kann es aber Kostenstellen
und Projekte geben, für die es (noch) überhaupt keine Zuordnungen
gibt. Diese würden dann in der Kreuztabelle fehlen, was aber nicht
erwünscht ist. Vielmehr sollen die entsprechenden Zeilen bzw. Spalten
leer sein, aber die Zeilen- bzw. Spaltenüberschriften trotzdem
ausgegeben werden.

Man kann leicht das Kreuzprodukt von Produkten und Kostenstellen
zurückgeben und – falls vorhanden – den zugehörigen Anteil:

SELECT
p.Name AS Projekt,
k.Name AS Kostenstelle,
(
SELECT z.Anteil
FROM Zuordnungen AS z
WHERE k.KostenstelleID = z.KostenstelleID
AND p.ProjektID = z.ProjektID
) AS Anteil
FROM
Projekte AS p,
Kostenstellen AS k;

Nun hatte ich gehofft, diese Abfrage als Unterabfrage in einer
Kreuztabellenabfrage verwenden zu können:

TRANSFORM Sum(Anteil)
SELECT Projekt
FROM (
...
) AS Unterabfrage
GROUP BY Projekt
PIVOT Kostenstelle;

Ich erhalte aber stets diese Fehlermeldung:

"Das Microsoft Jet-Datenbankmodul erkennt 'k.KostenstelleID' nicht
als gültigen Feldnamen oder -ausdruck."

Woran könnte das liegen? Und wie ließe sich das Problem lösen? Ich
möchte nur ungern eine temporàre Tabellen verwenden.

<http://schneegans.de/usenet/mid-schreibweisen/> · Postings verlinken
 

Lesen sie die antworten

#1 Christoph Schneegans
10/12/2008 - 13:35 | Warnen spam
Christoph "Ingrid" Schneegans schrieb:

Ich erhalte aber stets diese Fehlermeldung:

"Das Microsoft Jet-Datenbankmodul erkennt 'k.KostenstelleID' nicht
als gültigen Feldnamen oder -ausdruck."

Woran könnte das liegen? Und wie ließe sich das Problem lösen?



Wenn ich die Unterabfrage

(
SELECT z.Anteil
FROM Zuordnungen AS z
WHERE k.KostenstelleID = z.KostenstelleID
AND p.ProjektID = z.ProjektID
) AS Anteil

durch

DLookup("Anteil", "Zuordnungen", "ProjektID=" & p.ProjektID & " AND KostenstelleID=" & k.KostenstelleID) AS Anteil

ersetze, làuft die Kreuztabellenabfrage problemlos. Sehr merkwürdig.

<http://schneegans.de/web/xhtml/> · Klare Antworten zu XHTML

Ähnliche fragen