Datenbank Abfrage wie SVerweis

Verfahrensingenieur25

Neuer Benutzer
Beiträge
4
Hallo zusammen,
ich habe folgendes Problem in meiner Access Datenbank (Daten sind nur beispielhaft)

Tabelle A:

BuchstabeBeispielzahl
A10
B20
C50

Tabelle B:

Datensatz 1Buchstabe 1Zahl 1Berechnetes Feld 1Buchstabe 2Zahl 2Berechnetes Feld 2Konstante
Text1A10= Zahl1*KonstanteB10=Zahl2*Konstante100
Text2B20=Zahl1*Konstante=Zahl2*Konstante200
Text3B20=Zahl1*Konstante=Zahl2*Konstante50
Text4C50=Zahl1*Konstante=Zahl2*Konstante500
Text5=Zahl1*KonstanteC50=Zahl2*Konstante100

Jedem Datensatz in Tabelle B ("Datensatz 1") sind zwei Buchstaben aus der Tabelle A ("Buchstabe 1", "Buchstabe 2") zugeordnet. In der Tabelle A hat jeder Buchstabe eine weitere zugeordnete Zahl ("Beispielzahl"). Diese "Beispielzahl" möchte ich in einer Access/SQL-Abfrage abhängig nach dem eingetragenen Buchstaben in Tabelle B übertragen, um daraus zwei weitere Zahlen zu berechnen ("Berechnetes Feld1" und "Berechnetes Feld2"). Es kann vorkommen, dass "Buchstabe 1" ODER "Buchstabe 2" leer bleiben.

Falls das Beispiel noch unklar ist, bitte nachfragen. Mein Ansatz bisher:

SELECT TabelleB.*, TabelleA.Beispielzahl AS Zahl 1, TabelleA.Beispielzahl AS Zahl 2,
FROM TabelleA, Tabelle B
WHERE TabelleB.Buchstabe1 = TabelleA.Buchstabe AND TabelleB.Buchstabe2 = TabelleA.Buchstabe;

Leider hat das nicht geklappt. Vielleicht weiß ja jemand von euch weiter.

Vielen Dank im Voraus!
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.848
Code:
postgres=# create table team(id int primary key, name text);
CREATE TABLE
postgres=# create table spiele (heim int references team, gast int references team);
CREATE TABLE
postgres=# insert into team values (1,'foo');
INSERT 0 1
postgres=# insert into team values (2,'bar');
INSERT 0 1
postgres=# insert into spiele values (2,1);
INSERT 0 1

postgres=# select heim.name as heim, gast.name as gast from spiele s left join team as heim on (s.heim=heim.id) left join team as gast on (s.gast=gast.id);
 heim | gast 
------+------
 bar  | foo
(1 row)

postgres=#
 

Georg V.

Aktiver Benutzer
Beiträge
37
Zu Deinem Beispiel: Müsste in der Spalte Zahl2 in der ersten Zeile nicht eine 20 statt 10 stehen?
Du hast die Bedeutung der leeren Zeile in Zahl 1 und Zahl 2 nicht erwähnt, vom Beispiel her würde ich erwarten, dass Du erwartest, dass die Wert von der Zeile zuvor übernommen wird. BITTE vergiss solches Verhalten SQL ist nicht Excel! SQL verarbeitet Mengen und nicht Zeilen. Das klappt nur dann, wenn Du in Tabelle B ein Attribut mit einer eineindeutigen und sortierten Attribut (normalerweise Zeilennummer oder sonstige ID's) hast.

Ansatz für SQL wäre (in etwa)
SELECT TabelleB.*, T1.Beispielzahl AS Zahl 1, T2.Beispielzahl AS Zahl 2,
FROM TabelleA as T1, TabelleA as T2, Tabelle B
WHERE TabelleB.Buchstabe1 = T1.Buchstabe AND TabelleB.Buchstabe2 = T2.Buchstabe;
 
Werbung:

Verfahrensingenieur25

Neuer Benutzer
Beiträge
4
Zu Deinem Beispiel: Müsste in der Spalte Zahl2 in der ersten Zeile nicht eine 20 statt 10 stehen?
Ja stimmt, da müsste eine 20 stehen.

Du hast die Bedeutung der leeren Zeile in Zahl 1 und Zahl 2 nicht erwähnt, vom Beispiel her würde ich erwarten, dass Du erwartest, dass die Wert von der Zeile zuvor übernommen wird. BITTE vergiss solches Verhalten SQL ist nicht Excel! SQL verarbeitet Mengen und nicht Zeilen. Das klappt nur dann, wenn Du in Tabelle B ein Attribut mit einer eineindeutigen und sortierten Attribut (normalerweise Zeilennummer oder sonstige ID's) hast.
Es kann vorkommen, dass es nur einen Buchstaben 1 oder 2 gibt, also dass Spalte "Buchstabe 1" oder "Buchstabe 2" leer bleiben. Somit ist auch keine Zuordnung der Zahl1 bzw. Zahl2 notwendig.

Ansatz für SQL wäre (in etwa)
SELECT TabelleB.*, T1.Beispielzahl AS Zahl 1, T2.Beispielzahl AS Zahl 2,
FROM TabelleA as T1, TabelleA as T2, Tabelle B
WHERE TabelleB.Buchstabe1 = T1.Buchstabe AND TabelleB.Buchstabe2 = T2.Buchstabe;
Danke probiere ich gleich mal aus!
 
Oben