SQl-Statement

03/05/2011 - 20:17 von Alexander Bierig | Report spam
Hallo,

ich hoffe die Ecke hier ist richtig...aber ich will das Statement im
Access ausführen lassen.

Gegeben ist eine Tabelle

id_fg_komponente (long)
tiefenteil (String(255))

dabei stehen u.a. folgende Daten bereit
716 Grundtràger
716 Pralldàmpfer
716 Lüftungsgitter
716 Abdeckung NSW/Tagfahrlicht

Ich möchte nun in einer SQL-Abfrage die obigen Ergebnisse in EINE Zeile
mit zwei Spalten kriegen:
716 Grundtràger; Pralldàmpfer; Lüftungsgitter; Abdeckung NSW/Tagfahrlicht

wie setze ich ein deratiges SQL-Sttement am sinnigsten an?


Danke fürs Hirnen.

LG

Alex.
 

Lesen sie die antworten

#1 Henry Habermacher
04/05/2011 - 06:38 | Warnen spam
Hallo Alexander

Alexander Bierig wrote:
Gegeben ist eine Tabelle
id_fg_komponente (long)
tiefenteil (String(255))

dabei stehen u.a. folgende Daten bereit
716 Grundtràger
716 Pralldàmpfer
716 Lüftungsgitter
716 Abdeckung NSW/Tagfahrlicht

Ich möchte nun in einer SQL-Abfrage die obigen Ergebnisse in EINE Zeile
mit zwei Spalten kriegen:
716 Grundtràger; Pralldàmpfer; Lüftungsgitter; Abdeckung NSW/Tagfahrlicht



Mit (Jet)SQL geht das nicht oder nur schwer, falls die Anzal der möglichen
zu verknüpfenden Eintràge limitiert ist. Das einfachste ist, dafür eine UDF
zu benutzen, die das Ergebnis wie gewünscht zurückliefert.
Diese kannst Du dann über ein SELECT Statement folgender Art aufrufen:

SELECT id_fg_komponente, alleTiefenteile(id_fg_komponente) AS Komponenten
FROM fg_komponenten
GROUP BY id_fg_komponente, alleTiefenteile(id_fg_komponente)

Die Funktion alleTiefenteile() könnte so aussehen:

Dim Public Function alleTiefenteile(id As Long) As Variant
Dim db as Database
Dim rs as Recordset
dim varResult as Variant
varResult = Null
Set db = CurrentDb()
Set rs = db.OpenRecordset( _
"SELECT tiefenteil " & _
" FROM fg_komponenten" & _
" WHERE id_fg_komponente=" & id, dbOpenSnapshot)
While not rs.eof
varResult = varResult + "; " & rs(0)
rs.movenext
Wend
rs.Close
Set rs = Nothing
Set db = Nothing
alleTiefenteile = varResult
End Function

Die Performance dürfte nicht allzu gut sein, weil Du damit für jede ID ein
Database Objekt instanziieren und darin ein Recordset anlegen musst. Du
könntest hier z.B. mit einer globalen Database Instanz arbeiten, z.B. unter
Verwendung des oft zitierten CurrentDbc Objekts. Details dazu findest Du im
Netz zu Hauf.

HTH
Henry

Ähnliche fragen