![]() |
Datenbank: MS SQL-Server • Version: 2000 • Zugriff über: ADO
SQL-Abfrage ueber 2 Tabellen
Guten Morgen,
ich steh gerade ein wenig auf'm Schlauch bezueglich einer SQL-Abfrage. Vielleicht koennt ihr mir ja helfen! Ich habe eine Tabelle 1 mit einer Spalte "Klasse" und eienr Spalte "Gruppe", diese Spalte enthaelt gewisse Werte. Und dann habe ich eine Tabelle 2, die die Spalten "a", "b", "c", "d" und "klasse" enthaelt. In diesen Spalten werden Preise abgelegt. Nun zu dem Problem: Ich will, dass per SQL aus der Tabelle 1 die Spalten "Gruppe" und "Klasse" wiedergegeben werden. Und: jenachdem, was in Spalte "Gruppe" der Tabelle 1 steht, soll die entsprechende Spalte in Tabelle 2 angesteuert werden und der Preis dazu ausgelesen werden. (Das Ganze dann natuerlich noch mit Tabelle1.Klasse = Tabelle2.Klasse!). Die Schwierigkeit liegt u.a. darin, das die Werte in der Spalte "Gruppe" der Tabelle 1 nicht genau so lauten, wie die Spalten (a-d) in Tabelle 2! Gibt es da irgendwie eine Moeglichkeit, das trotzdem per SQL zu machen? (Ich hoffe, ich hab mich jetzt verstaendlich ausgedrueckt! Und sorry, wenn der Titel ein wenig nichtssagend ist - wusste nicht, wie ich es kurz beschreiben sollte!) Vielen Dank schonmal fuer eure Muehe! Gruss, Delphi-Coder |
Re: SQL-Abfrage ueber 2 Tabellen
Zitat:
Greetz alcaeus |
Re: SQL-Abfrage ueber 2 Tabellen
Hmm... OK! Habe ich mir schon fast gedacht! Aber trotzdem Danke!
|
Re: SQL-Abfrage ueber 2 Tabellen
Hmmmm... also mit reinem SQL hast du da in der Tat schlechte Karten. SQL ist ja eine mengenorientierte Sprache und sieht kein Fallunterscheidungen vor. Die von dir gewünschte Logik mußt du also entweder in deinem Programm nachbauen oder über Stored Procedures des MSSQLServer realisieren.
|
Re: SQL-Abfrage ueber 2 Tabellen
Mit StoredProcedures kenne ich mich uebrhaupt nicht aus! Haettet ihr/du da vielleicht ein kleines Beispiel, an dem ich das nachbauen koennte?
|
Re: SQL-Abfrage ueber 2 Tabellen
gib mal bitte Beispieldaten - 2 Zeilen aus Tabelle 1, 4 aus Tabelle 2 - dann kann man eher helfen
Gruß |
Re: SQL-Abfrage ueber 2 Tabellen
Ok, kein Problem!
Code:
So! Nun sollte zu jedem Wert der Spalte "Gruppe" aus Tabelle 1 der passende Preis aus Tabelle 2 geholt werden! (die Klassen muessen natuerlich uebereinstimmen!)
Tabelle 1:
Klasse Gruppe ============================ A normale Fahrstunde A Autobahnfahrt B normale Fahrstunde B Fahrt bei Dunkelheit Tabelle 2: Klasse fahrstunde autobahn dunkelheit landstrasse ========================================================= A 11,00 13,00 11,00 13,00 B 12,00 15,00 12,00 14,00 Ich hab dieses beispiel gewaehlt, weil es vielleicht etwas anschaulicher ist! |
Re: SQL-Abfrage ueber 2 Tabellen
Hallo Delphi-Coder,
so wie du die Tabellen jetzt hast wird das nichts. Ein Vorschlag: definier dir eine Tabelle mit einer ID und den Bezeichnungen Gruppen:
Code:
Zweite tabelle wird deine jetzige Tabelle 1, allerdings wird statt dem Gruppenname die ID aus der vorherigen Tabelle abgespeichert.
ID Name
1 Fahrstunde 2 ... Tabelle 2 beinhaltet 3 Spalten:
Code:
Beim Select musst du dann nur noch sagen
Klasse Gruppe Preis
A 1 11 ...
SQL-Code:
Und das wars dann auch schon.
SELECT Preis FROM Tabelle2 WHERE Tabelle1.Klasse=Tabelle2.Klasse and Tabelle1.Gruppe=Tabelle2.Gruppe
Greetz alcaeus |
Re: SQL-Abfrage ueber 2 Tabellen
@alcaeus Vielen Dank fuer den Vorschlag! Leider habe ich die DB so vorgegeben und kann sie erstmal nicht aendern! Ich werde deinen Vorschlag aber im Hinterkopf behalten!
|
Re: SQL-Abfrage ueber 2 Tabellen
Hallo Delphi-Coder,
ich würde den Vorschlag nicht nur im Hinterkopf behalten, sondern evtl. vorschlagen/erzwingen. Wenn ihr jetzt noch eine Autobahnfahrt bei Dunkelheit braucht, dann müsst ihr wieder das DB-Layout ändern (neue Spalte), und das Programm anpassen. Bei meinem Vorschlag müssen nur noch 2-3 Records eingetragen werden, und das wars auch schon wieder. Greetz alcaeus |
Re: SQL-Abfrage ueber 2 Tabellen
Eine DB-Aenderung von diesem Ausmass halte ich persoenlich zu diesem Zeitpunkt noch fuer vertretbar. Ich werde mal sehen, was sich da machen laesst!
Allerdings wuerde ich eine reine SQL-Server-Loesung (ohne DB-Aenderung) vorziehen. (z. bsp. ueber eine StoredProcedure) Gruesse Delphi-Coder |
Re: SQL-Abfrage ueber 2 Tabellen
Beim MSSQL kannst du das so machen ...
SQL-Code:
Damit kannst du dir eine SP basteln.
// Leeren String deklarieren
declare @SQL varchar(1000) // Die Variable "@Field" (für gewünschten Feldnamen) deklarieren declare @Field varchar(50) // Die Variable "@Field" mit Feldnamen füllen SELECT @Field='Vorname' set @SQL = 'Select '+@Field+' from Adressen' Exec(@SQL) MSSQL führt dann SELECT Vorname FROM Adressen aus :zwinker: Eine Alternative zur SP wäre eine Funktion (mit RETURNS TABLE), die du dann via SUB-SELECTS einbindest Schöne Grüße, Jens :hi: |
Re: SQL-Abfrage ueber 2 Tabellen
@jensw_2000 Vielen Dank! Ich kann es leider erst heute abend probieren. Aber nur fuer den Fall, dass ich damit ueberhaupt nicht klarkomme: Wie funktioniert denn das mit der Funktion und den Sub-Selects?
Viele Gruesse Delphi-Coder |
Re: SQL-Abfrage ueber 2 Tabellen
Kann es auch grade nicht testen :mrgreen:
theoretisch aber so ...
SQL-Code:
Schöne Grüße,
-- eine Funktion erstellen, die dir eine virtuelle Tabelle zurückliefert
CREATE FUNCTION DynamicSQL (@Fieldname VARCHAR(20),@Tablename VARCHAR(40)) RETURNS TABLE AS -- SQL STRING declare @SQL varchar(1000) -- Funktionsparameret "verbauen" set @SQL = 'Select '+@Fieldname+' from '+@Tablename RETURN Exec(@SQL) Aufruf ... SELECT * FROM DynamicSQL(@Fieldname=(Select IrgendwasPlausibles FROM TABELLE A), @Tablename='Adressen') Jens :hi: |
Re: SQL-Abfrage ueber 2 Tabellen
Erstmal Danke! So auf die Schnelle steige ich da nicht hinter! Aber ich werde mich heute abend ausgiebig damit beschaetigen!
|
Re: SQL-Abfrage ueber 2 Tabellen
Falls das
SQL-Code:
nicht functionieren sollte, must du eine
RETURN EXEC(@SQL)
temporäre Tabelle erstellen, füllen, ausgeben und wieder Droppen ....
SQL-Code:
EXEC (@SQL)
INTO #TempTable RETURN #TEMpTable |
Re: SQL-Abfrage ueber 2 Tabellen
Nun - was von dem DB-Design zu halten ist, weißt Du ja nun - hier eine Lösung ohne Stored Procedure:
SQL-Code:
Gruß
SELECT Kat.Klasse
, Kat.Gruppe , CASE Kat.Gruppe WHEN 'normale Fahrstunde' THEN P.fahrstunde WHEN 'Autobahnfahrt' THEN P.autobahn WHEN 'Fahrt bei Dunkelheit' THEN P.dunkelheit WHEN 'Landstrassenfahrt' THEN P.landstrasse END AS Preis FROM Tabelle1 Kat INNER JOIN Tabelle2 P ON P.Klasse = Kat.Klasse |
Re: SQL-Abfrage ueber 2 Tabellen
@Leuselator
Wie immmer eine einfache und brilliante Lösung ... :mrgreen: Warum komme ich nie auf sowas ? :wall: Schöne Grüße, Jens :hi: |
Re: SQL-Abfrage ueber 2 Tabellen
Vielen Dank fuer die Loesung! Es funktioniert!
Ich werde aber die DB-Aenderung versuchen durchzusetzen! Gruss aus Dubai, Delphi-Coder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz