Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage-Ergebnis in einer Zeile

Begonnen von Accesser11, März 17, 2011, 15:13:25

⏪ vorheriges - nächstes ⏩

Accesser11

Hallo zusammen

Wie kann man bewerkstelligen, dass bei einer Abfrage mit Zwischen-Tabellen, das Ergebnis auf einer Zeile angezeigt wird?

Beispiel:

Abfrage-Ergebnis Ist:





NameSprache
MusterDeutsch
MusterEnglisch
MusterFranzösisch

Abfrage-Ergebnis Soll:



NameSpracheSpracheSprache
MusterDeutschEnglischFranzösisch

Vielen Dank und Gruss
Accesser11

Jonny

Hallo,

so wie ich das sehe brauchst Du eine Abfrage vom Typ Kreuztabelle (siehe Abfrageassi).

Gruß

Johann

Accesser11

Hallo zusammen

Kann mir dazu jemand helfen? Ich kapiere die Kreuztabelle nicht so ganz.

Danke und Gruss
Accesser11

Accesser11


oma

Hallo Accesser,

dir kann geholfen werden ;D

Übernehme eine kleine Funktion in ein Modul deiner DB:

Public Function SZ(Feld As String) As String

strSQL = "SELECT Sprache FROM DeineTabelle WHERE Nachname ='" & Feld & "'"
Set rs = DBEngine(0)(0).OpenRecordset(strSQL)

Do While rs.EOF = False
  SZ = SZ & " " & rs!Sprache
  rs.MoveNext
Loop

End Function


mit dieser Funktion erstellst du eine Abfrage:

SELECT Nachname, SZ([Nachname]) AS Ausgabe
FROM DeineTabelle
GROUP BY Nachname



u. damit bekommst du deine gewünschte Darstellung.


Gruß Oma
nichts ist fertig!

Accesser11

Hallo oma

Vielen Dank.

Darf ich dich bitten den Code noch kurz zu dokumentieren, da ich ihn nicht genau verstehe?
Wohin muss ich das Statement schreiben, damit die Funktion erkannt wird?

Besten Dank und Gruss
Accesser11

oma

Hallo Accesser,

schau mal in das Beispiel.
In der Tabelle1 sehen alle Werte; im Modul ModulText ist die Funktion SZ,
In der Abfrage qryZeileSpalte wird für jeden Namen (Nachname, da Name resereviertes Wort in Access) die Funktion aufgerufen.

Gruß Oma

[Anhang gelöscht durch Administrator]
nichts ist fertig!

Accesser11

Hallo zusammen

Bei mir funktioniert das von "oma" leider nicht.
Liegt es vielleicht daran, da ich Zwischen-Tabellen habe?

Gibt es auch die Möglichkeit neue Spalten zu generieren, wie im Beispiel (siehe Post 1), so dass nicht mehrere Werte in einer Zeile stehen?

Vielen Dank und Gruss
Accesser11

oma

Hallo Accesser,

dann mache mal eine kleine DB mit ein paar anonyme Daten u. stelle sie ins Forum.

Gruß Oma
nichts ist fertig!

Accesser11

Hallo Oma

Sorry für die späte Antwort und ein grosses Dankeschön für deine Hilfe!!!  ;)
Allgemein kann ich auch fragen, wie macht ihr das mit der Filterung mit Zwischen-Tabellen?

Danke und Gruss
Accesser11


[Anhang gelöscht durch Administrator]

oma

Hallo,

schau dir mal die überarbeitete DB an.
Habe als erstes aus Tabelle tblPersonSprache die Nachschlagefelder entfernt (ist von Übel!) u. in Tabelle tblPerson Nachname statt Name (Name reserviertes Wort in Access)


Dann ist es etwas anders wie in meinem ersten Beispiel; aber mit Abfrage qryPersonenSprache ist wieder der gleiche Stand u. Abfrage qrySprachen liefert das gewünschte Ergebnis.

Falls noch Unklarheiten bitte Nachfragen

Gruß Oma

[Anhang gelöscht durch Administrator]
nichts ist fertig!

Accesser11

Hallo,

Sorry für die sehr sehr späte Antwort! :(

Ich möchte es gerne so dargestellt haben, ist dies so auch möglich?



NameDeutschFranzösischEnglisch
Musterxx

Dies wäre die Ideale Lösung.
Ausserdem sollte bei der neuen Lösung möglich sein, dass noch weitere Spalten nach diesem Prinzip berücksichtigt werden können. (--> Siehe angefügte DB)
Am Schluss wird die Abfrage dann in ein Excel exportiert.

Vielen Dank für deine Hilfe! ;)

Dankbare Grüsse
Accesser11

[Anhang gelöscht durch Administrator]

oma

Hallo,

eine einfache Lösung (ohne X) wäre eine Kreuztabelle qrySprache_Neu1wie folgt:

TRANSFORM Count(qryPersonenSprache.Sprache) AS [Anzahl von Sprache]
SELECT qryPersonenSprache.Nachname AS Nachname, qryPersonenSprache.Vorname AS Vorname
FROM qryPersonenSprache
GROUP BY qryPersonenSprache.Nachname, qryPersonenSprache.Vorname
PIVOT qryPersonenSprache.Sprache



wenn du unbedingt deine  "X" haben willst , mache eine zweite Abfrage mit der Kreuztabelle wie folgt:

SELECT qrySprachen_Neu1.Nachname, qrySprachen_Neu1.Vorname,
IIf([Englisch]=1,"X","") AS Engl,
IIf([Französisch]=1,"X","") AS Franz,
IIf([Italienisch]=1,"X","") AS Ital
FROM qrySprachen_Neu1


Gruß Oma
nichts ist fertig!

oma

Hallo,

naja besser wäre schon eine Lösung, in der du in tblPersonSprache das "X" verewigst,
dann evt. so:


TRANSFORM First(qryPersonenSprache.AV) AS [ErsterWert von AV]
SELECT qryPersonenSprache.Nachname AS Nachname, qryPersonenSprache.Vorname AS Vorname
FROM qryPersonenSprache
GROUP BY qryPersonenSprache.Nachname, qryPersonenSprache.Vorname
PIVOT qryPersonenSprache.Sprache;



Gruß Oma

[Anhang gelöscht durch Administrator]
nichts ist fertig!

Accesser11

Hallo,

Vielen Dank für die schnelle Hilfe, echt super!!! :)

Ist es auch noch möglich nach dem gleichen Prinzip gleichzeitig die Autos anzeigen zu lassen? (--> siehe qryPerson_v1.1.zip)

Besten Dank und viele Grüsse
Accesser11