2009-06-02 5 views
2

Ich möchte Daten mit einer MS Access-Kreuztabellenabfrage ziehen, damit ich es an einen Bericht binden kann. Wenn ich die Seite lade, erhalte ich einen Laufzeitfehler '3637 ': Die Kreuztabelle einer nicht fixierten Spalte kann nicht als Unterabfrage verwendet werden.Wie führen Sie eine Kreuztabellenabfrage in Access mit einer festen Anzahl von Spalten

Ich möchte einen Weg, um ein festes Raster zurück, wenn ich die Abfrage ausführen und wenn die Zelle Null ist, eine Null anzuzeigen.

+0

Hier ist ein Beispiel. Abhängig von den Daten im Filter wird eine andere Anzahl von Spalten zurückgegeben. VERäNDERN Sum (tblCharting.Hours) AS SumOfHours SELECT tblCharting.DateofService VON tblCharting RIGHT JOIN tlkpServiceLocations_SQL ON tblCharting.ServiceLocation = tlkpServiceLocations_SQL.ID WHERE (((tblCharting.DateofService) Zwischen # 5/1/2009 # und # 5/5/2009 #)) GROUP BY tblCharting.DateofService, tblCharting.DateofService PIVOT tlkpServiceLocations_SQL.LocationName; Ich bin auf der Suche nach immer die gleiche Anzahl von Spalten, die die Zeilen in der Lookup-Tabelle ist. – Robert

Antwort

1

Unterabfrage? Das ist eine meiner Schwächen, wenn es um Access geht, also kann ich dir nicht helfen. Ich würde vorschlagen, die SQL der Abfrage zu veröffentlichen, damit andere einen Blick darauf werfen können. Was passiert auch, wenn Sie die Abfrage ausführen?

Das folgende ist eine Abfrage, die ich verwende, um mir Kosten für die letzten zehn Jahre für eine gegebene Einheit zu geben. TRANSFORMATION Sum (ServiceRecords.srTotalCost) AS AnnualCost SELECT FROM ServiceRecords.srEquipmentID ServiceRecords GROUP BY ServiceRecords.srEquipmentID pivot "C" & DatDiff ("yyyy", [srServiceDate], Date()) In ("C9", C8, C7, C6, C5, C4, C3, C2, C1, C0);

Der Trick ist nach dem PIVOT. Da ich die Daten der letzten zehn Jahre haben möchte, stellt der "C" & DateDiff-Teil einen Stringvariablenruf C0 bis C9 auf. Der Abschnitt nach dem In gibt an, in welche Spalte die Dinge eingefügt werden sollen.

Eine andere Abfrage, die Daten über das Equipment einholt, ruft diese Abfrage auf. Der Begriff, den wir normalerweise für solche verwenden, sind gestapelte Abfragen.

Wenn dies nicht ausreicht, geben Sie bitte an, um welche Art von Daten Sie eine Kreuztabelle erstellen möchten.

Fellow Access MVP, Allen Browne hat eine gute Seite zu diesem Thema. Crosstab query techniques

+0

Ok, ich verstehe was du sagst. Grundsätzlich kann ich die In ("x", "y", "z") mit den gewünschten Spaltennamen verwenden. Das funktioniert zwar, aber gibt es eine Möglichkeit, diese automatisch aus den Zeilen einer Nachschlagetabelle zu generieren? – Robert

+0

Siehe die letzte Zeile meines gerade editierten Postings. –

+0

Das ist ein toller Beitrag. Danke vielmals. – Robert

Verwandte Themen