Guten Tag,
ich bin noch frisch in der sql-Welt und stehe gerade vor einem Problem, dass ich nicht lösen kann. Ich habe eine SQL-Datenbank (postgres) übernommen, die ich komplett auslesen möchte. Es gibt zwar schon einige Views, nur sind diese nicht ausreichend für meine Bedürfnisse und leider kann ich diese nicht anpassen, da mir das Wissen zu SQL fehlt. Zur Struktur: Die DB beinhaltet Krebspatienten (Tabelle Patienten), deren Aufenthalte im Krankenhaus (Tabelle Aufenthalte), Therapie, Operationen u.a. Die Tabellen sind inhaltlich verschachtelt, d.h. ein Patient kann mehrere Aufenthalte haben und je Aufenthalt z.B. mehrere Operationen und Therapien. Den View, den ich habe liest mir aber immer nur den 1. Wert je Patient aus. Das Ziel soll es aber sein, dass ich am Ende zu jedem Patienten alle Informationen habe. Ich habe den View unten angefügt, über Tipps würde ich mich sehr freuen:
CREATE VIEW alle_Daten AS
SELECT
P.Id,
P.Id_ha,
P.Historynr,
P.Personkenz,
P.Id_osp,
P.Aufnahmenr,
P.Name,
P.Vorname,
P.Strasse,
P.Ort,
P.Plz,
P.Land,
P.Gebdatum,
P.Lkontakt,
getSymbol('ValueStatus',P.Status) AS Status,
getSymbol('ValueGeschlecht',P.Geschlecht) AS Geschlecht,
getSymbol('ValueTodesursache',P.Todesursache) AS Todesursache,
getSymbol('ValueT',D.T) AS T,
getSymbol('ValueN',D.N) AS N,
getSymbol('ValueM',D.M) AS M,
getSymbol('ValueR',D.R) AS R,
getSymbol('ValuePc',D.Pc) AS Pathologisch_Klinisch,
getSymbol('ValueJaNein',D.Y) AS Y_TNM,
D.Diagdatum AS Diagnosedatum,
getSymbol('ValueRezidiv',D.Rezidiv) AS Rezidiv,
D.Rezidivdatum,
getSymbol('ValueJaNein',D.Erstdiag) AS Erstdiagnose,
getSymbol('ValueTneu2010',D.T) AS Tneu,
getSymbol('ValueNneu2010',D.N) AS Nneu,
getSymbol('ValueMneu2010',D.M) AS Mneu,
getSymbol('ValueGrading',D.Grading) AS Grading,
getSymbol('ValueLokalisation',D.Lokal) AS Lokalisation,
getSymbol('ValueLymphL',D.LymphL) AS L,
getSymbol('ValueLymphV',D.LymphV) AS V,
getSymbol('ValueHisto',D.Histologie) AS Histologie,
D.Icdoda AS ICD_O_DA,
T.Beginn AS Therapiebeginn,
T.Ende AS Therapieende,
getSymbol('ValueArtOp',T.ArtOp) AS ArtOp,
**getSymbol('ValueHaupttherapie',T.Hauptth) AS Haupttherapie,
**getSymbol('ValueArtchemo',T.Artchemo) AS Chemotherapie,
T.Dosis AS Dosis_in_Gy,
getSymbol('ValueCurPal',T.CurPal) AS KurativPaliativ,
getSymbol('ValueJaNein',T.Adjuvant) AS Adjuvant,
getSymbol('ValueJaNein',T.Neoadjuvant) AS Neoadjuvant,
T.Bemerkung,
T.Ort AS Therapie_Ort,
getSymbol('ValueNeoadjuvant',T.NeoadjuvantType) AS NeoadjuvantType,
R.Groesse,
R.Gewicht,
getSymbol('ValueJaNein',R.Diabetes) AS Diabetes,
getSymbol('ValueJaNein',R.HerzKreisl) AS Herzkreislauf,
getSymbol('ValueJaNein',R.ChrBronchit) AS ChronischeBronchitis,
R.Kreatinin,
getSymbol('ValueJaNein',R.Raucher) AS Raucher,
R.NichtRSeit AS Nichtraucherseit,
getSymbol('ValueOrganbefall',R.Organbefall) AS Zweitkarzinom,
R.Zkarzinom AS Zweitkarzinom_Datum,
R.PackYears As PackYears,
T.ArtOp AS ArtOp2,
L.pO2Max AS pO2Max,
L.DLCO,
L.ForceExp,
L.VC,
L.Vo2max AS VO2Max,
to_char(D.DiagDatum, 'YYYY') AS DiagYear,
to_number(to_char(age(P.LKontakt,D.DiagDatum),'Y'),'999')
+to_number(to_char(age(P.LKontakt,D.DiagDatum),'MM'),'999')/12
+to_number(to_char(age(P.LKontakt,D.DiagDatum),'DD'),'999')/310 AS Time2event,
to_number(to_char(age(P.LKontakt,T.Beginn),'Y'),'999')
+to_number(to_char(age(P.LKontakt,T.Beginn),'MM'),'999')/12
+to_number(to_char(age(P.LKontakt,T.Beginn),'DD'),'999')/310 AS Time2event_Therapie_Beginn
FROM Patient P,Aufenthalt A, Diagnose D, Therapie T, Risiko R, Lungenfunktion L
WHERE P.Id = A.Id_Patient
AND P.Verwertbar = 1
AND D.Id_Auf = A.Id
AND T.Id = (SELECT MIN(sT.Id) FROM Therapie sT WHERE sT.Id_Diag = D.Id)
AND R.Id = (SELECT MIN(sR.Id) FROM Risiko sR WHERE sR.Id_Auf = A.Id)
AND L.Id = (SELECT MIN(sL.Id) FROM Lungenfunktion sL WHERE sL.Id_Auf = A.Id);