SQL-Abfrage Union, Join
03.07.2019 16:56:11
Toni
ich versuche mich gerade an ADO-Grundfragestellungen und in diesem Zusammenhang habe ich mir diese Aufgabe gestellt:
Schritt1: Kopiere 2 Tabellen (Datei1 und Datei3) in einer Zieltabelle via Union untereinander, wobei eine der Tabellen weniger Spalten und Spalten-Alias´ hat.
Schritt2: hole aus Datei2 analog zum SVerweis Daten an die Zieltabelle --> Join.
Noch simuliere ich das in "einer einzigen" Datei mit mehreren Tabellenblättern, später werden es separate Dateien: Zieldatei.xlsx / Datei1.xlsx / Datei2.xlsx / Datei3.xlsx
Eine Testdatei mit Erklärungen findet Ihr hier:
https://www.herber.de/bbs/user/130715.xlsm
bzw.:
https://www.herber.de/bbs/user/130716.xlsx
Das sind meine bisherigen Errungenschaften:
Sub Abfrage()
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer
strFile = ActiveWorkbook.FullName
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
'Union:
strSQL = "SELECT aaaa, bbbb, cccc, dddd, eeee, ffff, gggg, hhhh FROM ( " _
& "SELECT Spalte1 as aaaa, Spalte2 as cccc, Spalte3 as gggg, Spalte4 as hhhh " _
& "FROM [Datei3Tabelle1$] " _
& "UNION ALL " _
& "SELECT aaaa, bbbb, cccc, dddd, eeee, ffff, gggg, hhhh " _
& "FROM [Datei1Tabelle1$] ) "
'Join:
strSQL = strSQL & "SELECT * " _
& "FROM [Datei1Tabelle1$] " _
& "Left Join [Datei2Tabelle1$]" _
& "Where Datei1Tabelle1$.aaaa = Datei2Tabelle1$.Suchwert1 "
rs.Open strSQL, cn, 3, 3
Worksheets("Zieltabelle").Cells(1, 1).CopyFromRecordset rss
End Sub
Ich Würde mich wie immer sehr freuen über Lob, Anerkennung und Bestätigung :), aber natürlich auch über Vorschläge Eurerseits!
lG und Danke im Voraus
Toni