Forums Neueste Beiträge
 

Sql-Abfrage auf 2 Tabellen - verzwickt

04/10/2007 - 11:40 von arno | Report spam
Hallo,

t'schuldigung für den blöden Betreff aber es ist etwas kompliziert zu
beschreiben. Es gibt sicher ein Fachwort um diese Art der Verschlüsselung zu
beschreiben. Vorab: Ganz unten habe ich eine Lösung, geht die auch
einfacher?

Mein Problem: Ich habe eine Tabelle für Projekte für die Selektionskriterien
in einem kodiert Feld gespeichert werden, dazu möchte ich die Texte
auslesen.

Projekttabelle:
ProjektNR Kriterien
1 AC
2 BA
3 BB

Kriterientabelle:
Typ Wert Bezeichnung
X A Paris
X B London
X C Mailand
Y A Frankreich
Y B UK
Y C Italien

ich hàtte gerne eine SQL-Abfrage die vom Kriterium die Bezeichnung holt:
ProjektNR TypX TypY
1 Paris Italien
2 London Frankreich
3 London UK

Beim Kriterium kommt es also auf die Stelle an, wo der Buchstabe steht: Das
erste Zeichen von Projekt 1 (A) hat immer den Typ (X) der Wert kann A, B
oder C sein. Das zweite Zeichen ist immer Typ (Y) und kann den Wert A, B
oder C haben.

Es wàre für mich kein Problem, Zwischenschritte einzulegen, also Abfragen
auf Abfragen auf Abfragen zu machen, solange ich am Ende mein
gewünschtes Ergebnis erziele. Aber wie geht man sowas an? Wie verknüpfe ich
die beiden Tabellen in _einer_ Abfrage? Vom Design der Datenbank habe ich
keinen Einfluss, es handelt sich um ODBC-Links in einer MDB.

Viele Grüsse

arno

PS: so hab ich das erstmal gelöst, geht es auch einfacher?

Abfrage1:
Select ProjektNR, 'X'&left(kriterien,1) as Sel1, 'Y'&right(kriterien,1) as
Sel2 FROM Projekttabelle
liefert:
ProjektNR Sel1 Sel2
1 XA YC


Abfrage2:
Select Typ&Wert as Key, Bezeichnung FROM Kriterientabelle

Key Bezeichnung
XA Paris
YC Italien

Abfrage3:

SELECT Abfrage1.ProjektNR, a21.Bezeichnung as Sel1Bez, a22.Bezeichnung as
Sel2Bez
FROM (Abfrage1 LEFT JOIN Abfrage2 AS a21 ON Abfrage1.Sel1 = a21.Key) LEFT
JOIN Abfrage2 AS a22 ON Abfrage1.Sel2 = a22.Key;

ProjektNR Sel1Bez Sel2Bez
1 Paris Italien
2 London Frankreich
3 London UK



oder alles in einem Rutsch:
SELECT a1.ProjektNR, a21.Bezeichnung AS Sel1Bez, a22.Bezeichnung AS Sel2Bez
FROM
((SELECT ProjektNR, 'X'&left(kriterien,1) AS Sel1, 'Y'&right(kriterien,1) AS
Sel2 FROM Projekttabelle) as a1
LEFT JOIN (SELECT Typ&Wert AS [Key], Bezeichnung FROM Kriterientabelle) AS
a21 ON a1.Sel1 = a21.Key)
LEFT JOIN (SELECT Typ&Wert AS [Key], Bezeichnung FROM Kriterientabelle) AS
a22 ON a1.Sel2 = a22.Key;
 

Lesen sie die antworten

#1 Thomas Möller
04/10/2007 - 14:44 | Warnen spam
Hallo Arno,

arno schrieb:
Mein Problem: Ich habe eine Tabelle für Projekte für die
Selektionskriterien in einem kodiert Feld gespeichert werden, dazu
möchte ich die Texte auslesen.

Projekttabelle:
ProjektNR Kriterien
1 AC
2 BA
3 BB

Kriterientabelle:
Typ Wert Bezeichnung
X A Paris
X B London
X C Mailand
Y A Frankreich
Y B UK
Y C Italien

ich hàtte gerne eine SQL-Abfrage die vom Kriterium die Bezeichnung
holt: ProjektNR TypX TypY
1 Paris Italien
2 London Frankreich
3 London UK

Beim Kriterium kommt es also auf die Stelle an, wo der Buchstabe
steht: Das erste Zeichen von Projekt 1 (A) hat immer den Typ (X) der
Wert kann A, B oder C sein. Das zweite Zeichen ist immer Typ (Y) und
kann den Wert A, B oder C haben.



Das Problem ist Dein Datenmodell. Du speicherst zwei Informationen in
einem Feld. Darin liegt der Fehler.

Für den Anfang möchte ich Dir diese Seiten empfehlen:
http://www.me-asal.de/access/17-normalformen.htm
(Link in einer Zeile)

In Deiner Projekttabelle darfst Du immer nur *ein* Kriterium pro Zeile
angeben. Wenn ein Projekt zwei Kriterien erfüllt, dann dann legst Du
dementsprechend zwei Datensàtze an.

Ich würde es so angehen:


Kriterientabelle:
=Wert Typ Bezeichnung
A X Paris
B X London
C X Mailand
D Y Frankreich
E Y UK
F Y Italien


Projekttabelle:
==ProjektNR Kriterium
1 D
1 C
2 Y
2 A
3 E
3 B

Jetzt kannst Du die beiden Tabellen in einer Abfrage über das Feld
Kriterium / Wert joinen. So erhàltst Du die gewünschten Daten.
Für die Aufbereitung kannst Du eine Kreuztabellenabfrage verwenden.

HTH
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen