Registriert seit: 13.08.2017
Version(en): 2016
Hallo Forum,
folgende Konstellation: Mappe1!DS enthält Datensätze mit dieser Struktur: |Datum | Konto | Vorgang | Betrag| Mappe2!BEZ hat diese Struktur: |Projektnummer | Projektbezeichnung|
Die Projektnummer in Mappe1 ergibt sich aus dem Vorgangstext. Der SQL-String: SELECT *, LEFT(Vorgang,4) AS Projektnummer FROM `C:\Mappe1.xlsx`.`DS` generiert ein Tabellenblatt mit der Struktur: |Datum | Konto | Vorgang | Betrag | Projektnummer|
Leider gelingt es mir nicht. die Projektbezeichnung über die WHERE-Klausel einzubeziehen; die virtuell erzeugte Projektnummer wird dort nicht akzeptiert. SELECT *, LEFT(Vorgang,4) AS Projektnummer FROM `C:\Mappe1.xlsx`.`DS`, `C:\Mappe2.xlsx`.`BEZ` WHERE Projekt = `BEZ$`.Projektnummer
Hat jemand eine Idee, wie man das Problem mit einer (1) Abfrage lösen kann? Den (funktionierenden) Work-Around mit 2 nacheinander geschalteten Abfragen würde ich mir gern ersparen.
Mit freundlichen Grüßen Rolf Beißner
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, erst mal eins - Du schreibst Zitat:Mappe1!DS enthält Datensätze mit dieser Struktur: |Datum | Konto | Vorgang | Betrag| dann schreibst Du Zitat:Die Projektnummer in Mappe1 ergibt sich aus dem Vorgangstext. Meintest Du eventuell im zweiten Zitat die Mappe 2? 1) Eventuell zeigst Du mal Deinen funktionierenden Code aus dem Workaround , vielleicht auch gleich mit zwei Beispieldateien 2) bei Zugriff auf mehrere Tabellen müsstest Du auch die Tabellen angeben, also im Prinzip so etwas wie SELECT ds.Datum, ds.Konto, ds.Vorgang, ds.Betrag, LEFT(ds.Vorgang,4) AS Projektnummer_ds, bez.Projektbezeichnung, bez.Projektnummer From ... Where Projektnummer_ds = bez.Projektnummer
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 13.08.2017
Version(en): 2016
Hallo Schauan,
die Projektnummer ergibt sich aus dem Vorgangstext - LEFT (vorgang,4) - und existiert noch nicht als separates Kriterium bzw. Spalte in einer Mappe. Genau das ist das Problem, für das ich eine Abfragelösung suche. Man kann das natürlich in zwei Stufen erledigen: Zuerst die Daten in einem Tabellenblatt ausgeben, und sich dann in einer zweiten Abfrage auf dieses Blatt beziehen. Aber das will ich gern vermeiden.
Freundliche Grüße Rolf
Registriert seit: 25.11.2021
Version(en): 2019, 365
29.11.2022, 20:27
(Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2022, 20:32 von Ralf A.)
Hi, der SQL String heißt nicht nur so, er ist auch ein String. Das heißt, er ist kein String, den man wild mit Funktionen oder Variablen durchsetzen kann, er muss entsprechend zusammengesetzt werden. Bsp.: Code: Dim strSQL as string strSQL = "SELECT *, " & LEFT(Vorgang,4) & " AS Projektnummer... "
oder: Code: Dim strSQL as string, strVorgang as string strVorgang = Left(Vorgang,4) strSQL = "SELECT *, " & strVorgang & " AS Projektnummer... "
Also, Strings in Anführungszeichen und diese mit Funktionen, Konstanten oder Variablen über & miteinander verbinden... "Select a, " & strVorgang & " From..." und immer schön auf die Leerzeichen achten....
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hi Ralf,
Der String passt schon (fast) wie angegeben zusammen.
Das z.B. ist falsch: ... "SELECT *, " & LEFT(Vorgang,4) & " AS Projektnummer... " LEFT(Vorgang,4) hat nix mit VBA-"Berechnung" oder Variablen zu tun, das ist ein Teil der SQL-Anweisung.
(fast): Lediglich "Projekt" hängt in der Luft, deswegen meine Änderung an zwei Stellen in Projektnummer_ds
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 26.09.2022
Version(en): 2019
29.11.2022, 23:42
(Dieser Beitrag wurde zuletzt bearbeitet: 29.11.2022, 23:47 von derHoepp.
Bearbeitungsgrund: eingerückt und ergänzt
)
Hallo, kann das sein, dass du ein Join-Statement schreiben willst? Code: SELECT a.Datum, a.Konto, LEFT(a.Vorgang,4) as Projektnummer, b.Projektbezeichnung FROM `C:\Mappe1.xlsx`.`DS` as a LEFT JOIN `C:\Mappe2.xlsx`.`BEZ` as b ON Projektnummer = b.Projektnummer
einfacher wahrscheinlich, die Textverarbeitung in den ON-Teil zu verfrachten: Code: SELECT a.Datum, a.Konto, b.Projektnummer, b.Projektbezeichnung FROM `C:\Mappe1.xlsx`.`DS` as a LEFT JOIN `C:\Mappe2.xlsx`.`BEZ` as b ON LEFT(a.Vorgang,4) = b.Projektnummer
Gegebenenfalls musst du das Ergebnis von LEFT() noch in eine Zahl wandeln, damit gejoined werden kann. Viele Grüße derHöpp
Registriert seit: 13.08.2017
Version(en): 2016
Hallo Kollegen,
danke, dass Ihr euch mit meinem Problem beschäftigt habt. Danke vor allem an deHöpp. Der JOIN-Ansatz ist die Lösung.
Herzliche Grüße Rolf
Registriert seit: 25.11.2021
Version(en): 2019, 365
(29.11.2022, 20:58)schauan schrieb: Das z.B. ist falsch: ... "SELECT *, " & LEFT(Vorgang,4) & " AS Projektnummer... " LEFT(Vorgang,4) hat nix mit VBA-"Berechnung" oder Variablen zu tun, das ist ein Teil der SQL-Anweisung. ...davon bin ich ausgegangen... hatte Vorgang als VBA Variable betrachtet....
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben. Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
|