Hallo,
ich habe folgendes Problem. Um Umsatzauswertungen unserer Krankenfahrten durchzuführen, versuche ich seid geraumer Zeit eine vernünftige SQL-Abfrage hinzubekommen, bisher habe ich diese auf Programmtechnischer Seite, also jeder Datensatz einzeln, durchgeführt. Bei einer Auswertung von mehreren Jahren oder eine Simulation für zukünftige Tarife der Krankenkassen kann dieser Vorgang mehrer Minuten dauern, und mal ehrlich, Zeit ist doch wirklich etwas sehr kostbares.
Also folgende Ausgangsituation:
Die Tabellen:
<b>Patienten</b>: ID, (....), Krankenkasse
<b>Krankenkasse</b>: ID, (....), Tarif
<b>Tarif</b>: ID, (...)
<b>Tarif_Entfernungen</b>: ID, Tarif_ID, Gueltig_ab, Serie, Einfach, Sammel, Von_km, Bis_km, Einstieg, proTour, leerKM, besetztKM
<b>Auftraege</b>: ID, Patient_ID, Datum, Serie, Einfach, Sammel, Kilometer (...)
Einen Zusammenhang zwischen den <b>Auftraegen, Patienten, Krankenkassen</b> und der Tabelle <b>Tarif</b> herzustellen ist kein Problem
<b>Syntax</b>
select f.datum, p.id as Patient, k.id as Kasse, kt.id as Tarif, f.Kilometer, f.serienbehandlung, f.transportschein
from fahrauftraege f
left join patienten p on (f.Patient_ID = p.id)
left join krankenkassen k on (p.kasse = k.id)
left join kassentarife kt on (k.tarifsatz = kt.id)
where f.zaehler = :Patient_ID and f.jahr = :Jahr
Ergebnis-Beispiel:
Datum Patient Kasse Tarif Kilometer Serie Einfach
2005-09-03 21 1 2 9 F T
.
.
.
usw.
ich habe dieses hier mit einem LEFT JOIN gelöst natürlich ist auch ein einfaches WHERE möglich da ID's-Verbindungen zu den jeweiligen Tabellen komplett sind. Das Problem besteht in dem einfügen der Tabelle Tarif_Entfernung.
Hier sind die eigentlichen werte enthalten, Als Berechnungsgrundlage ist hier natürlich abhängig vom Datum des Auftrages der "Älteste" Tarif zu nutzen, also Tarif_Entf.gueltig_ab <= Auftrag.datum
Füge ich nun diese Tabelle ebenfalls durch z.B. Left join oder where ein so werden mir für den Auftrag mehrer Zeilen ausgegeben da eine Spalte gueltig_bis nicht vorhanden ist.
Ergebnis-Beispiel:
Datum Patient (...) Gueltig_ab Einstieg proTour ...
2005-09-03 21 ... 2003-09-01 2,56 € 0,00 €
2005-09-03 21 ... 1997-06-01 0,00 € 2,00 €
.
.
.
usw.
dieses Ergebnis ist natürlich nicht richtig.
Ich so langsam am verzweifeln, ob mit Group by, Order By oder ähnlichem, es folgt einfach nicht das richtige Ergebnis. Auch das erstellen einer Temporären Tabelle un dem späteren Auffüllen mit den Daten also das Auffüllen mit den Grunddaten und der späteren Berechnung mit Update Table kam zu keinem Ergebnis.
Wer kann mir weiterhelfen.
cu Jan
ich habe folgendes Problem. Um Umsatzauswertungen unserer Krankenfahrten durchzuführen, versuche ich seid geraumer Zeit eine vernünftige SQL-Abfrage hinzubekommen, bisher habe ich diese auf Programmtechnischer Seite, also jeder Datensatz einzeln, durchgeführt. Bei einer Auswertung von mehreren Jahren oder eine Simulation für zukünftige Tarife der Krankenkassen kann dieser Vorgang mehrer Minuten dauern, und mal ehrlich, Zeit ist doch wirklich etwas sehr kostbares.
Also folgende Ausgangsituation:
Die Tabellen:
<b>Patienten</b>: ID, (....), Krankenkasse
<b>Krankenkasse</b>: ID, (....), Tarif
<b>Tarif</b>: ID, (...)
<b>Tarif_Entfernungen</b>: ID, Tarif_ID, Gueltig_ab, Serie, Einfach, Sammel, Von_km, Bis_km, Einstieg, proTour, leerKM, besetztKM
<b>Auftraege</b>: ID, Patient_ID, Datum, Serie, Einfach, Sammel, Kilometer (...)
Einen Zusammenhang zwischen den <b>Auftraegen, Patienten, Krankenkassen</b> und der Tabelle <b>Tarif</b> herzustellen ist kein Problem
<b>Syntax</b>
select f.datum, p.id as Patient, k.id as Kasse, kt.id as Tarif, f.Kilometer, f.serienbehandlung, f.transportschein
from fahrauftraege f
left join patienten p on (f.Patient_ID = p.id)
left join krankenkassen k on (p.kasse = k.id)
left join kassentarife kt on (k.tarifsatz = kt.id)
where f.zaehler = :Patient_ID and f.jahr = :Jahr
Ergebnis-Beispiel:
Datum Patient Kasse Tarif Kilometer Serie Einfach
2005-09-03 21 1 2 9 F T
.
.
.
usw.
ich habe dieses hier mit einem LEFT JOIN gelöst natürlich ist auch ein einfaches WHERE möglich da ID's-Verbindungen zu den jeweiligen Tabellen komplett sind. Das Problem besteht in dem einfügen der Tabelle Tarif_Entfernung.
Hier sind die eigentlichen werte enthalten, Als Berechnungsgrundlage ist hier natürlich abhängig vom Datum des Auftrages der "Älteste" Tarif zu nutzen, also Tarif_Entf.gueltig_ab <= Auftrag.datum
Füge ich nun diese Tabelle ebenfalls durch z.B. Left join oder where ein so werden mir für den Auftrag mehrer Zeilen ausgegeben da eine Spalte gueltig_bis nicht vorhanden ist.
Ergebnis-Beispiel:
Datum Patient (...) Gueltig_ab Einstieg proTour ...
2005-09-03 21 ... 2003-09-01 2,56 € 0,00 €
2005-09-03 21 ... 1997-06-01 0,00 € 2,00 €
.
.
.
usw.
dieses Ergebnis ist natürlich nicht richtig.
Ich so langsam am verzweifeln, ob mit Group by, Order By oder ähnlichem, es folgt einfach nicht das richtige Ergebnis. Auch das erstellen einer Temporären Tabelle un dem späteren Auffüllen mit den Daten also das Auffüllen mit den Grunddaten und der späteren Berechnung mit Update Table kam zu keinem Ergebnis.
Wer kann mir weiterhelfen.
cu Jan
Comment