Hallo zusammen
Wie kann man bewerkstelligen, dass bei einer Abfrage mit Zwischen-Tabellen, das Ergebnis auf einer Zeile angezeigt wird?
Beispiel:Abfrage-Ergebnis Ist:
Name | Sprache |
Muster | Deutsch |
Muster | Englisch |
Muster | Französisch |
Abfrage-Ergebnis Soll:
Name | Sprache | Sprache | Sprache |
Muster | Deutsch | Englisch | Französisch |
Vielen Dank und Gruss
Accesser11
Hallo,
so wie ich das sehe brauchst Du eine Abfrage vom Typ Kreuztabelle (siehe Abfrageassi).
Gruß
Johann
Hallo zusammen
Kann mir dazu jemand helfen? Ich kapiere die Kreuztabelle nicht so ganz.
Danke und Gruss
Accesser11
Niemand eine Idee?
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
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
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]
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
Hallo Accesser,
dann mache mal eine kleine DB mit ein paar anonyme Daten u. stelle sie ins Forum.
Gruß Oma
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]
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]
Hallo,
Sorry für die sehr sehr späte Antwort! :(
Ich möchte es gerne so dargestellt haben, ist dies so auch möglich?
Name | Deutsch | Französisch | Englisch |
Muster | x | | x |
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]
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
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]
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
Hallo,
dazu habe ich dir doch schon eine Lösung mitgeteilt!!
http://www.access-o-mania.de/forum/index.php?topic=14122.msg81083#msg81083
Gruß Oma
[Anhang gelöscht durch Administrator]
Hallo oma
Zitatdazu habe ich dir doch schon eine Lösung mitgeteilt!!
Ja, sorry mir ist leider dabei ein Fehler unterlaufen, habe irgendwie zwei Themen dazu erstellt. >:(
Zitathttp://www.access-o-mania.de/forum/index.php?topic=14122.msg81083#msg81083
Leider sind da entweder nur die Sprachen oder die Autos berücksichtigt worden und nicht gleichzeitig beides (Sprachen + Autos).
Ich möchte gerne nochmals auf den ersten Lösungsansatz mit der Funktion zurückkommen.
Momentan ist mit dieser Lösung das Abfrageergebnis wie folgt:
Name | Sprache |
Muster | Deutsch Italienisch Französisch |
Ich möchte die Ausgabe jedoch so haben:
Name | Deutsch | Italienisch | Französisch |
Muster | x | x | x |
Ist die zweite Ausgabe mit der Funktion "SZ" oder mit sonst was möglich? ;)
Danke & Gruss
Accesser11
Hallo,
ZitatIch möchte die Ausgabe jedoch so haben:
Name Deutsch Italienisch Französisch
Muster x x x
willst du mich auf den Arm nehmen oder Testen???die Lösung habe ich dir doch auch schon in #13 mitgeteilt!!!!!
Dort ist in Abfrage qrySprachenNeu_3 dein gewünschtes Ergebnis (wofür du dich dann auch bedankt hast)
ZitatZitatLeider sind da entweder nur die Sprachen oder die Autos berücksichtigt worden und nicht gleichzeitig beides (Sprachen + Autos).
Ds ist natürlich nicht möglich, in einer Kreuztabelle steht im Kreuz einer Spalte u. einer Zeile immer nur ein Wert!
Gruß Oma
Hallo
Zitatwillst du mich auf den Arm nehmen oder Testen???
Dies habe ich ja X-Male bereits geschrieben, dass ich es in einer Abfrage haben will!
Ich will dir natürlich nicht unnötige Arbeit machen, sorry deswegen. ;)
Zur Erzielung, dass jeder Datensatz auf einer Zeile dargestellt wird, muss ich für dies mehrere Abfragen (wie #13) miteinander verbinden? Wenn ja, wie würde dies funktionieren?
Am Schluss möchte ich alles ins Excel exportieren. ;)
Vielen Dank und Gruss
Accesser11
Hallo,
natürlich lassen sich verschiedene Kreuztabellen zusammenfassen:
Hallo,
naturlich kannst du mehhrere Kreuztabellen zusammenfügen:
SELECT
qryPerson.Name,
qryPerson.English,
qryPerson.French,
qryPerson.German,
qryPerson.Italian,
qryPersonCar.Audi,
qryPersonCar.BMW,
qryPersonCar.VW
FROM qryPerson INNER JOIN qryPersonCar ON qryPerson.Name=qryPersonCar.Name;
Anbei auch die DB als Beispiel
Gruß Oma
anbei auch die DB...
[Anhang gelöscht durch Administrator]
Hallo,
Vielen vielen Dank für deine Hilfe! ;)
Ich habe noch ein kleines Problem festgestellt. Wenn man in der Tabelle "tbl_Person_cross_Language" den Datensatz mit der "PK_ID" --> 8 löscht, dann erscheint eine Fehlermeldung, dass es "Italian" nicht finden konnte. Dieser wird verursacht, weil in "qryPerson" diese Spalte nicht berücksichtigt wird, jedoch in "qryPersonenCar" angegeben wird.
Dies kann man beheben, indem man in der Abfrage "qryPersonenCar" die Felder in der SELECT-Anweisung qryPerson.German, qryPerson.English usw. durch qryPerson.* ersetzt. Dann funktioniert es und es ist auch noch übersichtlicher. ;D
Dies noch als Hinweis.
Viele Grüsse
Accesser11
Hallo,
Kannst du mir bitte noch helfen wie ich die "Auslastung" bei "tbl_Person_cross_Car" auf eine Zeile bringe?
Soll-Ergebnis:
Name | VW | Auslastung | Audi | Auslastung |
Muster | x | 50% | x | 10% |
Ich danke dir vielmals. ;)
Besten Dank und Grüsse
Accesser11
[Anhang gelöscht durch Administrator]
Hallo,
du musst eine KREUZTABELLENABFRAGE machen ;D
TRANSFORM Sum(tbl_Person_cross_Car.Auslastung) AS SummevonAuslastung
SELECT tblPerson.Name
FROM tblPerson INNER JOIN (tbl_Person_cross_Car INNER JOIN tblCar ON tbl_Person_cross_Car.FK_Car = tblCar.PK_ID)
ON tblPerson.PK_ID = tbl_Person_cross_Car.FK_Person
GROUP BY tblPerson.Name
PIVOT tblCar.Car
Gruß Oma
Hallo,
Vielen Dank für deine Hilfe! ;)
Kann man diese Abfrage auch in die Abfrage "qryPersonCar" integrieren?
Gibt es auch eine Möglichkeit die Spaltenüberschrift der Autos (Audi, VW usw.) durch "Auslastung" zu ändern?
Zitat
Name | VW | Auslastung | Audi | Auslastung |
Muster | x | 50% | x | 10% |
So wie ich die es in meinem letzten Eintrag geschildert habe wird die Darstellung nicht umsetzbar sein, oder?
Dankbare Grüsse
Accesser11