Hallo zusammen. Nach langer Zeit melde ich mich mal wieder hier, bisher hat mir immer Lesen und Suchen zur Problemlösung ausgereicht, diesemal komme ich jedoch irgendwie nicht weiter. Kurz gesagt: ich steh aufm Schlauch.
Also folgendes, ich habe 3 Tabellen:
Tabelle 1: Bausteine
In dieser steht der Name und ein Code eines Bausteins (natürlich noch mehr, aber für das Beispiel reichen diese beiden).
Tabelle 2: Komponenten
In dieser Tabelle steht der Name, Code und 3 Zeitwerte der Komponenten, aus denen ein Baustein bestehen kann (zeit1, zeit2, zeit3).
Tabelle 3: Zuordnung
In dieser Tabelle steht nun eine Referenz zu Bausteine.code, Komponenten.code und Komponenten.zeitwert (in Form von einfach 1, 2 oder 3).
Bausteine enthält also die übergeordneten Bausteine, Komponenten die Bestandteile derselben und Zuordnung die jeweilige, ja, Zuordnung der Komponenten zu den Bausteinen.
Nun möchte ich eine SQL-Abfrage schreiben, die mir a) den Namen und Code der Bausteine ausgibt (einfach) und b) den jeweiligen Zeitwert aus den Komponenten summiert. Das Problem dabei ist, dass ich ja nicht nur eine Spalte mit den Zeitwerten habe, sondern deren drei.
Ich bräuchte also eine Abfrage, die sozusagen "dynamisch" den Spaltennamen anpasst, je nachdem welche Zahl in der Tabelle Zuordnung angegeben wurde.
Folgendes Beispiel:
Tabelle Bausteine enthält folgende Daten:
Tabelle Komponenten:
Tabelle Zuordnung:
Nun müsste ich also von Komponenten den Wert "zeit1" von 0001 addieren mit "zeit3" von 0003, "zeit2" von 0009 und "zeit1" von 0009.
Und da fängt mein Problem an. Eventuell ist auch die Datenbankstruktur nicht optimal und man könnte es besser lösen. Bis zu diesem Problem fand ich sie jedoch ganz brauchbar, aber da habe ich mal wieder nicht weit genug gedacht.
Für ein JOIN/SUM() Statement bräuchte ich ja immer den jeweiligen Namen der Tabellenspalte, bzw. würde das überhaupt gehen, wenn verschiedene Spalten angesprochen werden müssen?
Theoretisch könnte ich den Zeitwert von zeit1 etc. auch in komp_zeit schreiben lassen, allerdings hätte ich dann eine Redundanz, die ich vermeiden will (wenn sich beispielsweise der Zeitwert einer Komponente ändert, müsste dies auch in der Tabelle Zuordnung dann nochmals eingetragen werden).
Falls die Datenbankstruktur kompletter Unsinn ist, würde ich mich auch über Verbesserungsvorschläge freuen. Ist ja noch kein gewachsenes Projekt sondern gerade in der Entwicklung.
Hilfe.
Also folgendes, ich habe 3 Tabellen:
Tabelle 1: Bausteine
In dieser steht der Name und ein Code eines Bausteins (natürlich noch mehr, aber für das Beispiel reichen diese beiden).
Tabelle 2: Komponenten
In dieser Tabelle steht der Name, Code und 3 Zeitwerte der Komponenten, aus denen ein Baustein bestehen kann (zeit1, zeit2, zeit3).
Tabelle 3: Zuordnung
In dieser Tabelle steht nun eine Referenz zu Bausteine.code, Komponenten.code und Komponenten.zeitwert (in Form von einfach 1, 2 oder 3).
Bausteine enthält also die übergeordneten Bausteine, Komponenten die Bestandteile derselben und Zuordnung die jeweilige, ja, Zuordnung der Komponenten zu den Bausteinen.
Nun möchte ich eine SQL-Abfrage schreiben, die mir a) den Namen und Code der Bausteine ausgibt (einfach) und b) den jeweiligen Zeitwert aus den Komponenten summiert. Das Problem dabei ist, dass ich ja nicht nur eine Spalte mit den Zeitwerten habe, sondern deren drei.
Ich bräuchte also eine Abfrage, die sozusagen "dynamisch" den Spaltennamen anpasst, je nachdem welche Zahl in der Tabelle Zuordnung angegeben wurde.
Folgendes Beispiel:
Tabelle Bausteine enthält folgende Daten:
Code:
code name AB01 Testbaustein 1 AB02 Testbaustein 2
Code:
code name zeit1 zeit2 zeit3 0001 Tun 10 20 30 0002 Machen 25 35 45 0003 Ebenso 45 60 75 0009 Blubb 5 6 7
Code:
baust_code komp_code komp_zeit AB01 0001 1 AB01 0003 3 AB01 0009 2 AB01 0002 1 AB02 0003 2 AB02 0002 3
Und da fängt mein Problem an. Eventuell ist auch die Datenbankstruktur nicht optimal und man könnte es besser lösen. Bis zu diesem Problem fand ich sie jedoch ganz brauchbar, aber da habe ich mal wieder nicht weit genug gedacht.
Für ein JOIN/SUM() Statement bräuchte ich ja immer den jeweiligen Namen der Tabellenspalte, bzw. würde das überhaupt gehen, wenn verschiedene Spalten angesprochen werden müssen?
Theoretisch könnte ich den Zeitwert von zeit1 etc. auch in komp_zeit schreiben lassen, allerdings hätte ich dann eine Redundanz, die ich vermeiden will (wenn sich beispielsweise der Zeitwert einer Komponente ändert, müsste dies auch in der Tabelle Zuordnung dann nochmals eingetragen werden).
Falls die Datenbankstruktur kompletter Unsinn ist, würde ich mich auch über Verbesserungsvorschläge freuen. Ist ja noch kein gewachsenes Projekt sondern gerade in der Entwicklung.
Hilfe.
Kommentar