Ich habe ein wenig zu diesem Thema geforscht und ich kann weder eine praktikable Lösung finden noch eine, die gut genug erklärt ist, um sie umzusetzen.
Wenn Sie jemals eine Kreuztabellenabfrage in Access erstellt haben, wissen Sie, dass Access standardmäßig die Spalten in alphabetischer Reihenfolge sortiert. Sie können diese Reihenfolge ändern, indem Sie zum Dialogfeld Eigenschaften gehen und die Spaltenüberschriften in der von Ihnen bevorzugten Reihenfolge eingeben. Dies ist ein echter Schmerz, aber, wie ein Beantworter auf einer anderen Website erwähnt, "Es ist nur ein Schmerz einmal !"
Nun ... das ist nicht wahr, wenn Ihre Spalten dynamisch sind. In meinem Fall habe ich eine zweite Spalte in der Tabelle, die die Spaltenüberschriften enthält, die ich in diesem Feld zum Sortieren verwenden möchte. Ich denke, ich könnte die Details meiner Sortierspalte an die Vorderseite der Beschreibungsspalte anhängen (was an anderer Stelle vorgeschlagen wurde), aber ich denke nicht, dass dies das eleganteste Mittel zur Lösung des Problems ist. Dies ist insbesondere ein Problem, da die Sortierinformationen Systemdaten sind und für den Endbenutzer der Kreuztabelle nutzlos sind.
Kennt jemand eine Lösung für dieses Problem? Wenn ja, könnten Sie die Schritte zum Sortieren der dynamischen Spalten einer Kreuztabellenabfrage formulieren?
Ich denke, dass das Problem in allen Versionen von Access, die allgemein verwendet werden (Access 2003+), dauerhaft ist, aber nur für den Fall, dass es einen Unterschied macht, verwende ich Access 2010.
AKTUALISIEREN
Hier sind einige sehr einfache Beispieldaten, die helfen, das Problem auszudrücken. Es gibt ein paar andere Komplexitäten in meinem Live-Szenario, aber dieser Datensatz hat sicherlich den entscheidenden Vorteil.
Tabelle # 1
Hier kommen die Überschriften. % Co_de% ist die Sortierung für die Spaltenreihenfolge und Key
ist die ausgegebene Überschrift in der Kreuztabelle.
Tabelle # 2 Dies ist der Datenspeicher
Descriptions
ist eindeutig und die beiden sind ein Primärschlüssel für die Tabelle.
Kreuztabellenergebnisse Diese werden nach Excel exportiert, damit der Benutzer sie aktualisieren kann.
%Vor% So sortiert Access diese Spalten. Wie es aussieht, ist jedoch die folgende Tabelle, die nicht in P_Key + F_Key
, sondern in Table #1
vom Schlüssel getrennt ist.
Nachdem ich mehrmals auf dasselbe Szenario gestoßen war, bereitete ich einen wiederholbaren Weg vor, um eine In-Liste am Ende der PIVOT-Klausel hinzuzufügen. Dadurch werden die Spalten in der Kreuztabellenabfrage nach der Reihenfolge der Elemente in der Liste Pivotfield In sortiert. Dokumentation für dieses Konstrukt ist in MSDN verfügbar . Die Lösung ist eine Prozedur, die von einer Befehlsschaltfläche in einem Formular oder einem anderen Ereignis ausgelöst werden muss. Bitte sehen Sie die Screenshots unter dem Sub.
%Vor%Beachten Sie im folgenden Screenshot die tblKeyDescriptions und die tblPFValues. Diese sind von der Frage. qryCrosstab_Initial ist analog zu der Abfrage in der obigen Frage. Das Formular wird verwendet, um die Prozedur auszuführen und die Vorher- und Nachher-Abfragen zu öffnen.
Ein Integer-Feld (NumericIndexForSorting) wurde zu tblKeyDescriptions hinzugefügt, weil das Unterverzeichnis einen numerischen Index zum Sortieren der Spaltennamen benötigt.
Sehen Sie sich nun die In-Liste an, die in der SQL-Ansicht der initialen und sortierten Abfragen markiert ist.
Dies ist alles, was erforderlich ist, um die Spalten in einer Kreuztabellenabfrage anzuordnen. Das dynamische Generieren der In-Liste ist der Zweck des Subs.
Hinweis: Die Subroutine muss bei jeder Ausführung der Abfrage ausgeführt werden. Daher ist es hilfreich, ein Ereignis wie die Befehlsschaltfläche On Click zu verwenden, um die Sequenz zu verknüpfen.
Hier ist eine weniger als perfekte Lösung, die einige Access & amp; Excel:
Ich weiß nicht, wie komplex Ihr Skript ist, aber wenn diese Daten durch Automatisierung in die Excel-Datei eingefügt werden, können Sie Zeile 2 einfach ausblenden und Schritt 6 überspringen.
%Vor%Ich gehe nur auf dieses Problem ein. Während die angebotene Lösung (laut Beschreibung) funktioniert, besteht eine andere mögliche Lösung darin, das Query-def on the fly zu erstellen (wie in der beschriebenen Lösung), aber anstatt die SQL der Abfrage zu ändern, füllen Sie einfach die Eigenschaft Spaltenüberschriften der Abfrage mit eine dynamisch generierte Zeichenfolge von Spaltenüberschriften. OP erwähnt bereits die Funktionsweise der Spaltenüberschriften, nicht aber die Dies scheint leichter zu bewerkstelligen und beinhaltet nur etwas vba, um die möglichen Werte in einer Zeichenkette aufzuzählen und die Eigenschaft
zu setzenAlso werde ich das versuchen und sehen, ob es funktioniert / möglich ist
naja ... stellt sich heraus, dass die Spaltenüberschriften keine tatsächliche Eigenschaft von querydef sind, aber sie wird automatisch in SQL eingefügt.
Ich dachte, ich hätte einen guten Moment;)
Tags und Links sorting ms-access ms-access-2010 crosstab