![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: Zeos Lib 7
Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Hallo ..
Ich versuche schon ne geraume Zeit ein SQl-Statement zusammenzubasteln .. leider ergebnislos :-( GEGEBEN: Tabelle1 : OVERVIEW
Code:
ID | Eintragsname | ID_Kunde | ID_LEISTUNG | TABELLENNAME ........
Tabelle2 : ENTSCHAEDIGUNG
Code:
Tabelle3 : FREIKARTEN
ID | Eintragsname | BRUTTO | NETTO | EINHEIT | MWST | WAEHRUNG | ANZAHL .....
Code:
Tabelle4 : UMSATZBETEILIGUNG
ID | Eintragsname | BRUTTO | NETTO | EINHEIT | MWST | WAEHRUNG | ANZAHL ....
Code:
ID | Eintragsname | BRUTTO | NETTO | EINHEIT | MWST | WAEHRUNG | ANZAHL ...
Wenn Ich nun die OVERVIEW anhand ID-KUNDE = 10 filtere - sehe ich: 1 Entschädigung 1 10 100 ENTSCHAEDIGUNG 2 Entschädigung 2 10 101 ENTSCHAEDIGUNG 3 Eine Freikarte 10 201 FREIKARTEN 4 Eine Beteiligung 10 208 UMSATZBETEILIGUNG FRAGE jetzt hätte ich aber gerne in der OVERVIEW die Spalte "Brutto" noch gerne dabei .. ABER Brutto ist ja in einer der 3 Leistungsdatenbänke .. Ich hab in der Overview den Tabellennamen der betreffenden Leistung abgespeichert .. kann ich mit dem was anfangen?? Vielen Dank für Hinweise Erich |
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Ich verstehe zwar zum größten Teil nur Bahnhof, aber so auf den ersten Blick scheint Deine DB nicht "ordentlich" (d.h. mindestens 3.NF) normalisiert zu sein. Kannst Du evtl. etwas an der Struktur ändern, oder ist die fix vorgegeben?
|
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Kannst du die Leistungs-Tabellen ändern?
So wie es aussieht, haben die 3 Tabellen denselben Aufbau. Dann solltest du diese drei Tabelle zusammenfassen und eine neue Spalte "Leistungstyp" dazupacken. Dann kannst du in der Overviewtabelle auch den Leistungstyp benutzen. |
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Hallöle...:P
Ich finde du machst es dir zu schwer. Die 3 Tabellen kann man in einer Tabelle mit einem zusätzlichen Feld das den Typ "deklariert" verwalten. Ich benutze gern einen Integer als ID für so etwas, welche man dann über Enumerations im Programm abbilden kann. Dann hättest du in deiner Overview Tabelle nur die Leistung ID und ein einfacher JOIN auf die "Leistungstabelle" reicht. :thumb: Doppelt gemoppelt ist immer wieder gut... :P Ich hab am meisten Text... deswegen war ich zu langsam. :stupid: |
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Hallo DeddyH & MrSpock ..
Leider kann ich die Struktur nicht ändern ... Hallo haentschman .. Die 3 verschiedenen Leistungstabellen sind schon gegeben .. in der "ENTSCHAEDIGUNG" sind zusätzlich viele Felder betreffend "Konsumentenpreis-Indexanpassung" in der "UMSATZBETEILIGUNG" sind zusätzlich viele Feldber betreffend Zeiträume, Minimalbeträge, Umsatz% . in der "FREIKARTEN" sind zusätzlich viele Kartendaten .. berechtigte Personen ect .. Was alle 3 "Leistungstabellen" gemeinsam haben sind: Brutto, Netto, MWst .. und diese Werte sollte ich in der "OVERVIEW" darstellen .. ich hoffe ja immer noch dass eine sql-Abfrage mit tabellenname als variable ?? möglich ist .. oder eine IIF mit fixen tabellennamen ?? .. ThanX Erich |
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Zitat:
Falls du es aber aus irgendeinem Grunde musst - dann kannst du die Spalte Brutto mit CASE etwa so formulieren:
Code:
sofern ich das Feld LEISTUNG_ID richtig interpretiert habe.
case
when tabellenname = 'ENTSCHAEDIGUNG' then (select brutto from entschaedigung where id = leistung_id) when tabellenname = 'UMSATZBETEILIGUNG' then (select brutto from umsatzbeteiligung where id = leistung_id) when tabellenname = 'FREIKARTEN' then (select brutto from freikarten where id = leistung_id) end brutto Frank |
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Alternativ (ungetestet!):
Code:
select
x.*, y.brutto from OVERVIEW x left join ( select 'ENTSCHAEDIGUNG' as Tabellenname, ID, BRUTTO from entschaedigung union select 'FREIKARTEN' as Tabellenname, ID, BRUTTO from freikarten union select 'UMSATZBETEILIGUNG' as Tabellenname, ID, BRUTTO from umsatzbbeteiligung ) y on x.tabellenname = y.tabellenname and x.id_leistung = y.id where x.ID = 10 |
AW: Feld "Brutto-Betrag" aus einer von 3 möglichen Tabellen anzeigen
Zitat:
Ich befürchte für den ersten Teil muss man sehr alt werden, um es zu erleben. Der 2.Teil wurde ja schon gelöst, hier noch eine Variante, mix aus 1. und 2. Vorschlag. Dabei geht es nur um Performance, nimm was am schnellsten läuft (und natürlichem "richtigsten"). Ansonsten möchte ich wie die anderen vor mir dringend raten, dieses Datenmodell ordentlich zu überarbeiten. Mit dem aktuellen kommst Du auf Dauer in Teufelsküche.
Code:
-- ungetestet
select x.*, case when tabellenname = 'ENTSCHAEDIGUNG' then e.brutto when tabellenname = 'UMSATZBETEILIGUNG' then u.brutto when tabellenname = 'FREIKARTEN' then f.brutto end as brutto from OVERVIEW x left join (select ID, BRUTTO from entschaedigung) e on x.id = e.id left join (select ID, BRUTTO from freikarten) f on x.id = f.id left join (select ID, BRUTTO from umsatzbbeteiligung) u on x.id = u.id /*where ... andere bedingungen..*/ |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 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 by Thomas Breitkreuz