Hallo,
wie setze ich folgendes schlank in einen SQL Befehl um.
Ich habe es derzeit mit Hilfe einer VBA Funktion gelöst, suche aber einen schnelleren Weg.
Folgende Tabelle ist in folgende Abfrage zu realisieren:
SQL.jpg
Zitat von: NeuRose am August 05, 2021, 10:45:31wie setze ich folgendes schlank in einen SQL Befehl um.
Ich habe es derzeit mit Hilfe einer VBA Funktion gelöst, suche aber einen schnelleren Weg.
Eine VBA-Funktion, um eine kommagetrennte Liste von Werten zu erstellen (https://codekabinett.com/rdumps.php?targetDoc=access-vba-daten-spalte-kommagetrennt-ausgeben), ist in einer reinen Access Anwendung leider der einzige Weg.
Mit reinem SQL ist das nicht möglich. Wenn das Backend das unterstützt (z.B. MS SQL Server), kannst du dort die Werte mit einem serverseitigem Cursor oder ähnlichen Konstrukten erstellen.
Hallo, ich dachte so an eine Procedure unter SQL? Damit habe ich nicht viel Erfahrung ;-(
Ausgangspunkt der Überlegungen und vielleicht auch mitteilenswert wäre das verwendete Datenbankmanagementsystem. Da hat quasi jedes einen eigenen SQL-Dialekt, die verfügbaren Methoden darin können sich erheblich unterscheiden.
Zitat von: NeuRose am August 05, 2021, 10:45:31Ich habe es derzeit mit Hilfe einer VBA Funktion gelöst, suche aber einen schnelleren Weg.
Um wie viele Datensätze geht es denn überhaupt?
Es gibt die Möglichkeit die Liste mit Hilfe der ADO getString (https://docs.microsoft.com/en-us/sql/ado/reference/ado-api/getstring-method-ado?view=sql-server-ver15) Funktion zu erstellen.
Das sollte um ein vielfaches schneller sein, da die VBA Bremse nicht zum Tragen kommt.
Hast du mal überprüft, wie viel Zeit die VBA Funktion alleine verbraucht?
Die Grundabfrage benötigt ja auch Zeit.
Zitatmit Hilfe einer VBA Funktion gelöst
Diese wird sehr wahrscheinlich auch eine SQL-Anweisung benutzen, nun aber pro Datensatz ausgeführt. Damit kann man Probleme und Fehler wie z.B. fehlende Indexnutzung vervielfältigen, was sich dann in unangenehmen Laufzeiten äußern kann.