Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Abfrage aus mehreren Tabellen mit gleichem Kombinationsfeld

Begonnen von calixto, November 03, 2014, 19:49:36

⏪ vorheriges - nächstes ⏩

calixto

Hallo, habe zwar schon einige Datenbanken erstellt, hatte aber bisher noch keine in dieser Art, stehe damit leider noch sehr am Anfang und komme hier nicht weiter:

Zur Auswertung einer Umfrage mit vier unterschiedlichen Fragebögen unter vier Gruppen von Befragten habe ich vier Tabellen und entsprechende Formulare angelegt. Einige Fragen/Felder in den Tabellen/Formularen sind gleich, und ich möchte die Antworten der Gruppen in einer Abfrage vergleichen. Für Bewertungsfragen habe ich ein Kombinationsfeld mit folgenden Antwortoptionen (sehr gut, gut, weniger gut, nicht gut). Für jede Gruppe einzeln konnte ich je eine Abfrage erstellen, wer wie oft welche Antwort gegeben hat, jedoch nicht aus diesen vier Abfragen eine weitere Abfrage generieren. Diese Abfrage soll mir sowohl die Antwortoptionen (als Spalte, also "Sehr gut", "gut" usw.) und die verschiedenen Gruppen (als Zeile, also Gruppe 1, Gruppe 2 etc.) ausgibt und zählt (1xsehr gut Gruppe 1, 3xsehr gut Gruppe 2 usw.). Was mache ich falsch?
Ich danke SEHR für Hinweise!

Die vier Tabellen sind über eine fünfte verknüpft, die nur IDs enthält.
Benötige ich hier vielleicht andere oder zusätzliche Verknüpfungen?

MzKlMu

#1
Hallo,
hat jede Gruppe die gleichen Fragen ?
Ich vermisse eine Tabelle für die Antwortoptionen.
Und wo wird die Bewertung gespeichert, in welchem Feld ?

Ich denke, das Datenmodel ist grundsätzlich falsch und zwar erheblich..

Kannst Du mal ein Bild hochladen, in dem man die Feldernamen ganz sieht und auch alle Felder.
Gruß Klaus

calixto

Hallo MzKlMu,
vielen Dank für die schnelle Rückmeldung.

Ein Formular habe ich hochgeladen. Frage 1a hat ein typisches Kombinationsfeld integriert, wo die Bewertung gespeichert ist.
Nur einige Fragen z.B. 1a, 1b, 1c, 2 etc. sind bei allen Gruppen identisch und lassen sich in Charts im Vergleich darstellen.

Die Abfrage funktioniert wunderbar für EINE Tabelle/EIN Formular, aber eben nicht mehrere Tabellen im Vergleich. Muss ich tatsächlich für alle diese Abfragen dann eigene Tabellen anlegen und mit den anderen Tabellen verknüpfen?

Vielen Dank nochmals für einen Tipp.

MaggieMay

Hallo,

auch ich denke, das Datenkonzept ist falsch, da gibt es andere Ansätze, in welchen die Fragen pro Fragebogen einzeln in einer untergeordneten Tabelle gespeichert werden. Auch verstehe ich den Sinn der fünften Tabelle nicht.

Was das betrifft:
ZitatFür jede Gruppe einzeln konnte ich je eine Abfrage erstellen, wer wie oft welche Antwort gegeben hat, jedoch nicht aus diesen vier Abfragen eine weitere Abfrage generieren.
so zeige deinen Versuch (-> SQL-Code), dann sehen wir weiter.
Freundliche Grüße
MaggieMay

calixto

Hallo MaggieMay,

danke auch für Deine Rückmeldung.
Der SQL-Code für die Einzelabfrage für Frage 1a lautet:
TRANSFORM Count(Jugend.ID) AS [Gesamtsumme von ID]
SELECT Jugend.[Frage 1a Themen], Count(Jugend.ID) AS AnzahlvonID
FROM Jugend
GROUP BY Jugend.[Frage 1a Themen]
PIVOT Jugend.ID;

Wenn ich die Ergebnisse dieser Kreuztabelle dann in einer Abfrage für alle Gruppen gemeinsam abfragen will, kommen nur fehlerhafte Ergebnisse bei diesem Code (Antwortoptionen werden nicht gezeigt und richtig zugeordnet). Hier der Code für erstmal 3 Gruppen:
SELECT Veranstalter_Kreuztabelle.AnzahlvonID, Jugend_Kreuztabelle1_1.AnzahlvonID, Politik_Kreuztabelle3.AnzahlvonID
FROM Jugend_Kreuztabelle1 AS Jugend_Kreuztabelle1_1, Veranstalter_Kreuztabelle, Politik_Kreuztabelle3
GROUP BY Veranstalter_Kreuztabelle.AnzahlvonID, Jugend_Kreuztabelle1_1.AnzahlvonID, Politik_Kreuztabelle3.AnzahlvonID;




MaggieMay

Hallo,

du musst die Tabellen über die Frage miteinander verknüpfen, sonst erhältst du ja ein Kreuzprodukt.

Wie sieht denn eigentlich dein Wunschergebnis aus?
Freundliche Grüße
MaggieMay

calixto

Hallo MaggieMay,

danke für Deine Rückmeldung. Ich möchte die 4 verschiedenen Gruppen einzeln auswerten, aber zu verschiedenen (einfachen) Bewertungsfragen oder den statistischen Angaben vergleichen. Mir leuchtet schon ein, dass man eigentlich ein Tabelle extra anlegen müsste.

Durch die Verknüpfung der IDs über eine Einzeltabelle (war Tipp von IT-Experten) gelingt zumindest eine einfache Abfrage, bei der alle vier Tabellen berücksichtigt werden z.B. Abfrage Menge der Befragten nach Gruppen - aber eben keine komplexeren Abfragen mit Kombinationsfeld-Angaben.

Ist also der einzige Weg, für die Vergleichsfragen eine eigene Tabelle anzulegen, darin die Fragen (mit Kombifeldern) zu schreiben und diese Feldern dann in den jeweiligen Tabellen/Formularen der einzelnen Gruppen zu platzieren?

Danke für eine abschießende Einschätzung und die Unterstützung!
Herzliche Grüße

MaggieMay

Hallo,
Zitataber zu verschiedenen (einfachen) Bewertungsfragen oder den statistischen Angaben vergleichen
und genau darauf bezog sich meine Frage, wie soll das optisch dargestellt werden?
Bitte an einem Beispiel zeigen und nicht beschreiben.
Freundliche Grüße
MaggieMay

calixto

Hallo, danke für die Nachfrage.
Hochgeladen habe ich 1. die (funktionierende) Abfrage nach Teilnehmern der Befragung nach Gruppen (noch nicht viele, da Pretest). Und 2. die (nicht funktionierende) Abfrage nach der Beurteilung. Wenn es funktionieren würde, müssten vorweg die Werte "sehr gut", "gut" etc. aus den jeweiligen Kombinationsfeldern stehen. Ich mache übrigens daraus Charts - die wolltest Du nicht sehen oder?
Danke und bis bald

MaggieMay

Was ich am liebsten sehen würde wären keine Biilder sondern eine Beispiel-DB. ;)

Ich weiß auch nicht wozu du da Kreuztabellenabfragen einsetzt, wenn du lediglich die Zahl der Antworten pro Gruppe und Beurteilung sehen willst.
Das sollte sich doch mit einer gruppierten Abfrage ermitteln lassen:Select Frage1a, Count(*) As AnzJ From Jugend Group By Frage1aDiese Abfragen, eine je Gruppe, lassen sich dann folgendermaßen zusammenführen:Select J.Frage1a, AnzJ, AnzPäd, AnzV, AnzPol
From ((abfJugend As J Inner Join abfPolitik As Pol ON J.Frage1a = Pol.Frage1a)
Inner Join abfVeranstaltung As V ON J.Frage1a = V.Frage1a)
Inner Join abfPaedagogen As Päd ON J.Frage1a = Päd.Frage1a
Freundliche Grüße
MaggieMay

calixto

Liebe MaggieMay, vielen Dank für die Hilfestellung.

Ich habe das für Frage 1 Gruppe Jugend wie folgt übernommen:
SELECT Jugend.[Frage 1a Themen], Count(*) AS AnzJ
FROM Jugend
GROUP BY Jugend.[Frage 1a Themen];

Für die 2. Gruppe:
SELECT Veranstalter.[Frage 1a Themen], Count(*) AS AnzV
FROM Veranstalter
GROUP BY Veranstalter.[Frage 1a Themen];

Die Zusammenführung nach Gruppen habe ich mit Deinem Vorschlag einfach nicht hinbekommen - leider. Das wäre dann der Schlüssel für die restlichen Abfragen.

Daher meine hoffentlich letzte Frage: könntest Du den SQL-Code auf Grundlage der obenstehenden Codes schicken? Dann kann ich vielleicht da weitermachen. Zu blöd von mir - sorry!!!!

MaggieMay

Hi,

woran scheitert es denn, wie gehst du vor?

Erstelle eine neue Abfrage, nimm die beiden Abfragen als Datenquelle, verknüpfe die Abfragen über den gemeinsamen Key und wähle die anzuzeigenden Datenfelder aus.
Freundliche Grüße
MaggieMay

calixto

Ich kriege die Inner Join Verknüpfung zwischen den Abfragen nicht hin...habe sonst immer im Entwurf-Modus gearbeitet, bin mit SQL daher noch nicht so fit...

Das haut bei mir nicht hin:
SELECT Jugend.[Frage 1a Themen] AS AnzJ, AnzV
FROM  Jugend.[Frage 1a Themen] INNER JOIN Veranstalter.[Frage 1a Themen] ON Jugend.[Frage1a Themen] = Veranstalter.[Frage 1a Themen]

MaggieMay

Meine Beschreibung bezog sich auf den Abfrageentwurf, der SQL-Code dazu sollte so aussehen:SELECT aJugend.[Frage 1a Themen], AnzJ, AnzV
FROM  aJugend INNER JOIN aVeranstalter
ON aJugend.[Frage 1a Themen] = aVeranstalter.[Frage 1a Themen]
wobei aJugend und aVeranstalter für die Abfragen stehen, in welchen die Zahlen ermittelt werden.

Zitatbin mit SQL daher noch nicht so fit
Dann erstelle die Abfrage im Entwurfsfenster und schau dir anschließend das Ergebnis in der SQL-Ansicht an.
Freundliche Grüße
MaggieMay

calixto

Ich glaube, bald habe ich es.
Ich sehe mit Deinem Hinweis nun in der Entwurfsansicht die innere Verknüpfung der zwei Tabellen (siehe Bild), das leuchtet mir ein. Aber in der Abfrage gibt er mir noch nicht die Daten aus, sondern fragt davor nach Parameterwerten von AnzJ, und AnzV. D.h. doch, dass er die Ergebnisse der Abfrage nicht auswerten kann oder (siehe auch Bild)?

SQL dazu:
SELECT Jugend.[Frage 1a Themen], AnzJ AS Ausdr1, AnzV AS Ausdr2
FROM Jugend INNER JOIN Veranstalter ON Jugend.[Frage 1a Themen] = Veranstalter.[Frage 1a Themen];

Bei mir heißt die Abfrage: Jugend.[Frage 1a Themen], nicht: aJugend.[Frage 1a Themen] oder liegt da der Fehler im Benennen? Haben Abfragen in SQL einen anderen Code?

DANKE nochmal vielmals für Deine Geduld!!!