ppt

Werbung
Auswertung im GTDS
•
•
•
•
fixe Abläufe für Standard-Aufgaben
– Mamma-Auswertung
– Kolorekt-Auswertung
vorgefertigte Berichte ( Leitstelle  Berichtsauswahl )
Berichtsaufruf in der Auswertungs-Ansicht
( Funktion Druck/Ausg. )
Variable Auswertungen je nach Anforderung
Tabelle als Grundelement
Die Daten des GTDS werden in einer relationalen Datenbank
gespeichert. Auswertung bedeutet nichts anderes, als daraus
die gewünschten Daten in der gewünschten Form
herauszuholen. Grundelement einer relationalen Datenbank
ist die Tabelle, z.B. ergibt sich durch folgendes SQL :
SQL> l
1 select Pat_ID, Name, Vorname, Geburtsdatum
2
from PATIENT
3
where ......
So eine Tabelle :
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
Tabelle als Grundelement (II)
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
•
Tabelle hat einen bestimmten Namen ( hier PATIENT )
•
Spalten haben bestimmte Namen ( hier PAT_ID , NAME usw.)
•
Spalten haben Datentypen ( vereinfacht : Zahlen , Text oder Datum )
•
Anzahl und Typ der Spalten ist für alle Zeilen konstant
•
Daten stehen in den einzelnen Zeilen (hier sind es 4)
Grundlagen SQL (I)
nähere Einzelheiten siehe SQLKURS - Skript
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
Wenn die Tabelle PATIENT nur diese vier Zeilen enthält,
genügt zur Ausgabe folgendes :
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT ;
Grundlagen SQL (II)
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
Auswahl einzelner Spalten in der SELECT - Liste
select Name, Vorname, Geburtsdatum
from PATIENT ;
NAME
--------------Abrechnungstest
Prostata
........
VORNAME
---------Hermine
Hans
GEBURTSDAT
---------31.12.1899
11.11.1911
Grundlagen SQL (III)
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
Auswahl einzelner ZEILEN mit der where – Klausel
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT
where Name = 'Prostata' ;
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1602 Prostata
Hans
11.11.1911
Grundlagen SQL (IV)
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
where – Klausel, mehrere Teile mit AND (oder OR) verbunden
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT
where Name = 'B97test' AND Vorname = 'Fritz';
PAT_ID
---------1622
1623
NAME
--------------B97test
B97test
VORNAME
---------Fritz
Fritz
GEBURTSDAT
---------11.11.1911
11.11.1911
Grundlagen SQL (V)
PAT_ID
---------1622
1623
NAME
--------------B97test
B97test
VORNAME
---------Fritz
Fritz
GEBURTSDAT
---------11.11.1911
11.11.1911
where – Klausel für Zahlen
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT
where Pat_ID = 1622 ;
Die Spalte Pat_ID ist hier die einzige, welche es erlaubt, über
eine where-Klausel eine bestimmte Zeile der beiden "B97test"
herauszufinden. Nur mit Name, Vorname und Geburtsdatum
wäre der Zugriff nur auf einen von beiden nicht möglich.
Sie erfüllt hier die Funktion eines sog. Primärschlüssels
Grundlagen SQL (VI)
Order by – Klausel ordnet die Daten nach den angegebenen
Feldern :
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT
order by Name, Vorname ;
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
1602 Prostata
Hans
11.11.1911
Tabellen verbinden (Join)
• eine Datenbank besteht gewöhnlich aus zahlreichen
Tabellen, bei GTDS z.B. ca. 200
• zwischen diesen Tabellen bestehen Beziehungen, einfaches
Beispiel
PATIENT TUMOR
• die Zuordnung der einzelnen Datensätze erfolgt in einer
relationalen Datenbank ausschließlich durch "normale",
sichtbare Tabellenspalten, es gibt keine verdeckten
"Pointer" usw.
Tabellen verbinden (Join) – Beispiel (a)
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
1602 Prostata
Hans
11.11.1911
Zu den bereits bekannten Patienten existiert
eine Tabelle mit deren Tumoren :
Fk_Patient
Pat_ID
---------1581
1581
Tumor
ID
----1
2
1602 1
1622 1
Diagnose
datum
-------28.12.99
01.02.03
ICD10
---------C50
C18
01.07.97 C61
19.08.96 C61
DIAGNOSETEXT
---------------Mammakarzinom li.
Kolonkarzinom
Prostatakarzinom
Prostatakarzinom
Tabellen verbinden (Join) – Beispiel (b)
Die Beziehung der Datensätze ist einfach zu sehen,
begründet in der jeweils gleichen PAT_ID :
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
1602 Prostata
Hans
11.11.1911
Fk_Patient
Pat_ID
---------1581
1581
Tumor
ID
----1
2
1602 1
1622 1
Diagnose
datum
-------28.12.99
01.02.03
ICD10
---------C50
C18
01.07.97 C61
19.08.96 C61
DIAGNOSETEXT
---------------Mammakarzinom li.
Kolonkarzinom
Prostatakarzinom
Prostatakarzinom
Tabellen verbinden (Join) – Beispiel (c)
Realisierung in SQL :
select PATIENT.Pat_ID, PATIENT.Name, PATIENT.Vorname,
TUMOR.Fk_PatientPat_ID, TUMOR.Tumor_ID,
TUMOR.Diagnosedatum, TUMOR.ICD10
from
PATIENT, TUMOR
where PATIENT.Pat_ID = TUMOR.Fk_PatientPat_ID ;
PAT_ID
-----1581
1581
1602
1622
NAME
--------------Abrechnungstest
Abrechnungstest
Prostata
B97test
VORNAME
------Hermine
Hermine
Hans
Fritz
Fk_Patient
Pat_ID
---------1581
1581
1602
1622
Tumor
ID
----1
2
1
1
Diagnose
datum
-------28.12.99
01.02.03
01.07.97
19.08.96
ICD10
--C50
C18
C61
C61
Tabellen verbinden (Join) – Beispiel (d)
vereinfachte Version in SQL : der Name der Tabelle muß nur
dann vor den Spaltennamen stehen, wenn eine Spalte mit
gleichem Namen in beiden Tabellen vorkommt (hier nicht)
select Pat_ID, Name, Vorname,
Fk_PatientPat_ID, Tumor_ID,
Diagnosedatum, ICD10
from
PATIENT, TUMOR
where Pat_ID = Fk_PatientPat_ID ;
PAT_ID
-----1581
1581
1602
1622
NAME
--------------Abrechnungstest
Abrechnungstest
Prostata
B97test
VORNAME
------Hermine
Hermine
Hans
Fritz
Fk_Patient
Pat_ID
---------1581
1581
1602
1622
Tumor
ID
----1
2
1
1
Diagnose
datum
-------28.12.99
01.02.03
01.07.97
19.08.96
ICD10
--C50
C18
C61
C61
Tabellen verbinden (Join) – Beispiel (e)
vereinfachte Version in SQL II: in der from – Klausel kurze
Aliasnamen angeben und bei select und where verwenden
select P.Pat_ID, P.Name, P.Vorname,
T.Fk_PatientPat_ID, T.Tumor_ID,
T.Diagnosedatum, T.ICD10
from
PATIENT P, TUMOR T
where P.Pat_ID = T.Fk_PatientPat_ID ;
PAT_ID
-----1581
1581
1602
1622
NAME
--------------Abrechnungstest
Abrechnungstest
Prostata
B97test
VORNAME
------Hermine
Hermine
Hans
Fritz
Fk_Patient
Pat_ID
---------1581
1581
1602
1622
Tumor
ID
----1
2
1
1
Diagnose
datum
-------28.12.99
01.02.03
01.07.97
19.08.96
ICD10
--C50
C18
C61
C61
Tabellen verbinden (Join) – Beispiel (f)
Join in Schreibweise Standard – SQL (bei Oracle ab ca.
Version 9 verwendbar)
select P.Pat_ID, P.Name, P.Vorname,
T.Fk_PatientPat_ID, T.Tumor_ID,
T.Diagnosedatum, T.ICD10
from
PATIENT P JOIN TUMOR T
ON
P.Pat_ID = T.Fk_PatientPat_ID ;
PAT_ID
-----1581
1581
1602
1622
NAME
--------------Abrechnungstest
Abrechnungstest
Prostata
B97test
VORNAME
------Hermine
Hermine
Hans
Fritz
Fk_Patient
Pat_ID
---------1581
1581
1602
1622
Tumor
ID
----1
2
1
1
Diagnose
datum
-------28.12.99
01.02.03
01.07.97
19.08.96
ICD10
--C50
C18
C61
C61
Tabellen verbinden – (Outer) Join
1.
2.
3.
Die einfache Join-Abfrage verlangt, daß in allen
abgefragten Tabellen mindestens eine passende
Datenzeile existiert.
Dabei werden immer alle Felder aus der SelectListe im Ergebnis gezeigt, auch wenn dadurch
Daten mehrfach ausgegeben werden (Beispiel :
zweimal Stammdaten von "Hermine
Abrechnungstest" )
Sollen auch Daten angezeigt werden, bei denen
die erste Bedingung nicht zutrifft, muß ein sog.
Outer Join eingesetzt werden.
Tabellen verbinden – Beispiel Outer Join
"klassische" Oracle – Syntax : hinter der Spalte der Tabelle,
für die es evtl. keine Daten gibt, wird (+) gesetzt :
select P.Pat_ID, P.Name, P.Vorname,
T.Fk_PatientPat_ID, T.Tumor_ID,
T.Diagnosedatum, T.ICD10
from
PATIENT P, TUMOR T
where P.Pat_ID = T.Fk_PatientPat_ID(+) ;
PAT_ID
-----1581
1581
1602
1622
1623
NAME
--------------Abrechnungstest
Abrechnungstest
Prostata
B97test
B97test
VORNAME
------Hermine
Hermine
Hans
Fritz
Fritz
Fk_Patient
Pat_ID
---------1581
1581
1602
1622
Tumor
ID
----1
2
1
1
Diagnose
datum
-------28.12.99
01.02.03
01.07.97
19.08.96
ICD10
--C50
C18
C61
C61
Tabellen verbinden – Beispiel Outer Join
Standard – Syntax (bei Oracle ab ca. Version 9 verwendbar)
am Schluß könnte noch eine where-Klausel folgen :
select P.Pat_ID, P.Name, P.Vorname,
T.Fk_PatientPat_ID, T.Tumor_ID,
T.Diagnosedatum, T.ICD10
from
PATIENT P LEFT OUTER JOIN TUMOR
ON
P.Pat_ID = T.Fk_PatientPat_ID ;
PAT_ID
-----1581
1581
1602
1622
1623
NAME
--------------Abrechnungstest
Abrechnungstest
Prostata
B97test
B97test
VORNAME
------Hermine
Hermine
Hans
Fritz
Fritz
Fk_Patient
Pat_ID
---------1581
1581
1602
1622
Tumor
ID
----1
2
1
1
T
Diagnose
datum
-------28.12.99
01.02.03
01.07.97
19.08.96
ICD10
--C50
C18
C61
C61
SQL : EXISTS - Unterabfrage
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1581 Abrechnungstest Hermine
31.12.1899
1602 Prostata
Hans
11.11.1911
1622 B97test
Fritz
11.11.1911
1623 B97test
Fritz
11.11.1911
Beispiel : Patienten, für die mindestens ein Tumor dokumentiert ist :
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT P
where EXISTS (select 'X' from TUMOR T
where T.Fk_PatientPat_ID = P.Pat_ID)
Der Vergleich mit vorigen Folien zeigt, daß Patient Nr. 1623 keinen
Eintrag in der Tabelle TUMOR hat, er steht nicht mehr im Ergebnis
(daher durchgestrichen).
SQL : NOT EXISTS
PATIENT
PAT_ID
NAME
VORNAME
GEBURTSDAT
---------- --------------- ---------- ---------1623 B97test
Fritz
11.11.1911
Beispiel : Patienten, für die kein Tumor dokumentiert ist :
select Pat_ID, Name, Vorname, Geburtsdatum
from PATIENT P
where NOT EXISTS (select 'X' from TUMOR T
where T.Fk_PatientPat_ID = P.Pat_ID)
Der Vergleich mit vorigen Folien zeigt, daß Patient Nr. 1623 keinen
Eintrag in der Tabelle TUMOR hat, er steht allein im Ergebnis .
GTDS – Tabellen in der
Diagnosedaten-Maske
•
•
•
•
•
•
•
•
•
•
TUMOR
VORHANDENE_DATEN
VORERKRANKUNGEN
GKR
TNM
ANN_ARBOR
SONSTIGE_KLASSIFIK
LOKALISATION
HISTOLOGIE
AA_DIAGNOSESICHERUNG
•
•
.... usw. .... für die Texte zu den
Schlüsseln (z.B. ICD) sind
weitere Tabellen ab- zufragen
Spezialdokumentation z.B. für
Mamma , Untersuchungen und
Vorgesehene Maßnahmen
kommen noch extra dazu
Schlußfolgerung :
Auswertung durch
Abfragen auf die
Originaltabellen des GTDS
ist in den meisten Fällen zu
schwierig und fehleranfällig
Alles in einem : Auswertungs-Tabelle
• Alle Grund-Daten zum Tumor in einer Tabelle,
eine Zeile pro TUMOR (nicht pro Patient)
• Extrakt – Prinzip
– Daten werden jeweils durch ein komplexes Programm
zusammengestellt
– Aktualität / Datenstand entspricht dem Zeitpunkt, zu
dem der Extrakt erstellt wurde, siehe Feld
DATUM_DER_AUSWERTUNG , es wird nicht automatisch
nachgeführt.
– Mehrere Extrakte (im GTDS Auswertungs-Läufe)
können nebeneinander existieren, unterschieden
durch ihre VORGANG_ID
Herunterladen