cement
Goto Top

Access Abfrage (Tabelle transponieren)

SQL2005, Access2007

Moin Leute,

ich habe mit meinem Access2007 eine Tabelle einer SQL-Datenbank verknüpft.
Nun möchte ich eine bestimmte Abfrage erzeugen, weiß aber nicht wie.

Die Daten in der Tabelle sehen ungefähr so aus:

Kundennummer Feldnummer Feldinfo
1001 1 Herr
1001 2 Mayer
1001 3 Egon
2022 1 Frau
2022 2 Müller
2022 3 Ließchen

usw.

nun möchte ich eine Abfrage erstellen, die die Tabelle quasi transponiert:

Kundennummer Anrede Nachname Vorname
1001 Herr Mayer Egon
2022 Frau Müller Ließchen

Weiß aber nicht wie.
Hat jemand wohl eine passende Idee?

Danke schon mal,

Gruß CeMeNt

Content-Key: 127088

Url: https://administrator.de/contentid/127088

Ausgedruckt am: 29.03.2024 um 12:03 Uhr

Mitglied: it-frosch
it-frosch 14.10.2009 um 11:51:19 Uhr
Goto Top
Hallo CeMeNt,

versuche es mal damit indem du die Tabelle über 3 verschiedene Aliase einbindest.

select a.kundennummer,a.anrede,b.nachname,c.vorname from tabelle a
inner join tabelle b
on a.kundennummer=b.kundennummer where b.feldname=2
inner join tabelle c
on a.kundennummer=c.vorname where c.feldname=3


Nur so als Idee, ist nicht getestet.
Mitglied: Biber
Biber 14.10.2009 um 12:55:19 Uhr
Goto Top
Moin CeMeNt,

schematisch ginge es auch so:
SELECT KdNr,
 max(Feldnr1) as Anrede,
 max(Feldnr2) as Nachname,
 max(Feldnr3) as Vorname FROM (
SELECT Kundennummer as KdNr,
 Iif(Feldnummer =1, FeldInfo, Null) as Feldnr1,
 Iif(Feldnummer =2, FeldInfo, Null) as Feldnr2,
 Iif(Feldnummer =3, FeldInfo, Null) as Feldnr3
FROM FremdTab) x
group by kdnr;
Anzeige dann
KdNr	Anrede	Nachname	Vorname
1001	Herr	Mayer	Egon
2022	Frau	Müller	Lieschen

..aber richtig begeistern tut das auch nicht.

Wie gehen denn die eigentlichen Datenfürsten dieser merkwürdigen Datenstruktur, also die Applikation, deren SQL-Tabelle du liest, mit dieser Stuktur um?
Oder sind in deren Eingabemasken wirklich beliebig viele FeldNr/Textfeld-Kombinationen erfassbar und die Anwender müssen sich dann einigen, ob der Inhalt des Textfeldes bei einer Feldnummer = 9 nun "Telefon" oder "Sternzeichen" bedeutet??

Sieht mir schon nach Praktikantenpfusch aus, was deine Datenquelle ist...

Grüße
Biber
Mitglied: KalleAtWork
KalleAtWork 14.10.2009 um 13:30:44 Uhr
Goto Top
Hi,

sowas kann man mit dem Abfrageasistenten und dann Kreutztabellenabfrage erstellen:

Ich habe Deine Daten mal in "Tabelle1" geschrieben. Dann sieht die SQL-Ansicht so aus:

TRANSFORM First(Tabelle1.[Feldinfo]) AS ErsterWertvonFeldinfo
SELECT Tabelle1.[Kundennummer]
FROM Tabelle1
GROUP BY Tabelle1.[Kundennummer]
PIVOT Tabelle1.[Feldnummer];
Mitglied: CeMeNt
CeMeNt 14.10.2009 um 13:39:45 Uhr
Goto Top
Mahlzeit Leute,

@it-frosch
das ist leider etwas zu krytisch für mich.

@Biber
Die sog. Datenfürsten haben diese Infos vermutlich irgendwann mal auf "Druck des Kunden" nachgelegt.
Ich kann zwar nun weitere Informationen zu den Kunden speichern (natürlich über eine entsprechende GUI)
AAABER: kann diese nicht auswerten! (Prima, oder??)
dann könnten die es auch gleich bleiben lassen...

Also muss ich SQL-Tüffel nun versuchen mir die benötigten Daten irgendwie selber aufzubereiten.
Insgesamt gibt es in der Maske (und der dazugehörigen SQL-Tabelle 30 Felder)

Meine obige Tabelle muss also noch bis Feldnummer "30" erweitert werden.
Und das PRO KUNDE (sind bei uns über 2000)

Sieht mir schon nach Praktikantenpfusch aus, was deine Datenquelle ist...
Das lass ich mal so im Raum stehen...

@Biber und kalle:
ich werde mal versuchen Eure beiden Lösungen nachzuvollziehen.
Ich meld mich dann gleich noch mal.

Danke schon mal,
Gruß CeMeNt
Mitglied: CeMeNt
CeMeNt 14.10.2009 um 14:06:35 Uhr
Goto Top
Da bin ich schon wieder!

Also, KalleAtWork:

ich muß schon sagen: Wirklich klasse!
Genau das wollte ich erreichen!

@Biber
sei met net bös!
Deine Lösung hätte gaaaanz bestimmt auch funktioniert. face-wink

Aber die von Kalle sah mir irgendwie einfacher aus, und eben auch auf Anhieb geklappt!

Danke, Leute!
You made my day!

Gruß CeMeNt
Mitglied: Biber
Biber 14.10.2009 um 14:23:50 Uhr
Goto Top
Moin CeMeNt

sei met net bös!
Wieso sollte ich? Das, was ich (zu Fuss) gebastelt habe einspricht ja genau einer Kreuztabellenabfrage
TRANSFORM Max(FremdTab.Feldinfo) AS MaxWertvonFeldinfo
SELECT FremdTab.Kundennummer
FROM FremdTab
GROUP BY FremdTab.Kundennummer
PIVOT FremdTab.Feldnummer;
Ausgabe:
Kundennummer	1	2	3
1001	Herr	Mayer	Egon
2022	Frau	Müller	Lieschen

.. also als Unterschied nur, dass ich als Aggregatfunktion Max() statt First() gewählt und ein paar Spaltenüberschriften dazugemogelt habe.

Gemeint haben KalleAtWork und ich schon das Gleiche, denke ich.

Grüße
Biber