Wie kann ich die Spalten in einer Kreuztabellenabfrage sortieren, wenn die Spaltendaten dynamisch sind?

8

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.

%Vor%

Tabelle # 2 Dies ist der Datenspeicher Descriptions ist eindeutig und die beiden sind ein Primärschlüssel für die Tabelle.

%Vor%

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.

%Vor%     
RLH 13.12.2012, 14:50
quelle

3 Antworten

11

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.

    
eeasterly 24.12.2012, 19:48
quelle
1

Hier ist eine weniger als perfekte Lösung, die einige Access & amp; Excel:

  1. Wenn Sie die Kreuztabelle erstellen, verwenden Sie Table1.Key für die Spalten.
  2. Erstellen Sie auf einer neuen Registerkarte ("Lookup"?) in der Excel-Datei Tabelle # 1
  3. Erstellen Sie in der ersten Zeile der Hauptregisterkarte (dh dort, wo die Datenmenge eingefügt wird) in Ihrer Excel-Datei eine Reihe von Vlookup () - Formeln, um Zeile 2 zu betrachten und die richtige Beschreibung aus Ihrer Nachschlagetabelle einzufügen / li>
  4. Fügen Sie den Datensatz in Zeile 2 ein. Das Ergebnis ist die folgende Tabelle, in der die erste Zeile tatsächlich eine Gruppe von Vlookups ist, die die richtige Spaltenbeschreibung aufrufen.
  5. Bitten Sie den Benutzer, Zeile 2 zu ignorieren oder zu löschen.

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%     
PowerUser 13.12.2012 17:22
quelle
0

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 setzen
  • erzeugt Kreuztabelle querydef
  • listet die Spaltenüberschriften in der Zeichenfolge
  • auf
  • Eigenschaft festlegen

Also 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;)

    
user2485963 14.06.2013 12:06
quelle