SQL SQL Werte aus mehreren Zeilen, in einer ausgeben

Orkuna

Newbie
Registriert
Aug. 2022
Beiträge
4
Guten Tag,

ich komme leider nicht weiter mit meiner Suche, ich muss dazu erwähnen, dass ich noch ziemlich neu in SQL Abfragen bin und daher vieles nicht weiß.

Ich muss wie in der Überschrift beschrieben eine Abfrage erstellen, wobei ich mehrere Werte, die in der selben Zeile sind ausgebe.

In der Tabelle "Arzt" gibt es die Spalte "Art" und "Text" dort werden folgende Werte ausgegeben.

Art Text
Datum_OP_Anm(Hier steht ein Datum oder nichts)
OP_Anm_Ter(Hier steht Wert 1 oder nichts)
OP_Anm_Ter1(Hier steht Wert 1 oder nichts)
Text_01_OP_Anm(Hier steht ein Datum oder nichts)
OP_Anm_Radio(Hier steht ein ja, ein nein oder nichts)

Diese werte sollen in der Abfrage dann alle nebeneinander stehen mit den Werten/Daten oder eben leer bleiben, falls Null.
Dazu kommen noch weitere Daten wie Name etc, die allerdings schon in meiner Abfrage vorhanden sind. Im Besten Fall soll die Ausgabe dann so aussehen:

Datum | Aufnahmenummer| Name | Fachbereich | Datum_OP_Anm | OP_Anm_Ter | OP_Anm_Ter1 | Text_01_OP_Anm | OP_Anm_Radio

Dies gibt meine Abfrage bisher aus:
SQL Abfrage.JPG

Bisher sieht meine Abfrage wie folgt aus:
SQL:
select
 Erfasstwann Datum
, Patnr Aufnahmenummer
, (Select max (anf.Name || ', ' || anf.Vorname)
from
 Anforder_ANF Anf
where
Ar.PATNR = Anf.Aufnahmenr) Name
, EPS.PSTFAB_FACHBEREICH_AKT_MC Fachbereich
, EPS.PPVBZT_BEHNR_AKT BEHNR
from
Arzt Ar,
 P_PVAEP_EPISODE_ALLE eps
 where
 Ar.Patnr = eps.PPVEPS_AUFNR_MC
 and    ar.Obergruppe = 'HTML'
 and    ar.Untergruppe = 'StatDok'
 and    (ar.Art = 'OP_Anm_Ter23_O2'
 and    ar.text = 'Op-Planung'
 and    ar.Storniert = '0')

Für jegliche Tipps und Hilfe wäre ich sehr dankbar!!! :)
 
Zuletzt bearbeitet:
nutz bittedie code funktion vom forum und versuch das so zu formatieren, dass man die abfrage auch lesen kann.

hastdu dir grundsätzlich schon joins angesehen?
 
  • Gefällt mir
Reaktionen: Raijin und Orkuna
Ich hoffe nun ist es besser und übersichtlicher.

Nein bisher hab ich Joins noch nie genutzt.
 
Am Handy ist das etwas schwierig zu lesen, aber ich schieße mal ins Blaue und zeige eine exemplarischen Join

Code:
SELECT ar.*, anf.*
FROM ar JOIN anf
ON ar.patnr = anf.aufnahmenr 
WHERE ar.Obergruppe='HTML'
AND ...

Das ist ein (inner) join, der zwei Tabellen anhand eines Parameters verknüpft, hier die patnr aus der Arzttabelle und die aufnahmenr aus der anderen Tabelle.


Im übrigen solltest du bei SQL immer angeben welches SQL du meinst. MS SQL, MySQL, Postgresql, etc... Sie unterscheiden sich in der Syntax voneinander.
 
besser :)

Bin gerade unterwegs, aber was du machst klingt erstmal nac h "du hast 2 Tabelle, und willst sie anhandd er Patientenummer verknüpfen"

lies mal hier durch:
https://www.edureka.co/blog/sql-joins-types

wenn ich am PC bin kann ich nochmalschauen, aber es wäre auch Hilfreich zummindest Pseudotabelleninhalt zu sehen
 
  • Gefällt mir
Reaktionen: Der Lord
Übrigens:

Wenn man in verschiedenen Tabellen dieselbe Nummer verwendet, sollte man sie auch gleich benennen. Patnr = AufnahmeNr ist nicht intuitiv und sieht auf den ersten Blick nach einem Fehler aus. Sowas ist unschön und stößt jedes Mal übel auf, wenn man das liest.
 
  • Gefällt mir
Reaktionen: Der Lord
Genau, es werden zwei Tabellen, anscheinend unglücklich, verknüpft bisher ^^'
Aber das eigentliche Problem liegt dabei dass ich die ganzen Werte aus der Arzt Tabelle nicht mit ausgeben kann :/

Die Abfrage läuft über Oracle, bin mir da jetzt nicht sicher welches SQL das dann ist.
Ergänzung ()

Da hast du recht, das Problem ist nur die DB ist relativ groß und wurde mir so übergeben. Habe gut 500-1000 Tabellen und kenne mich mit der Konfiguration der DB leider gar nicht aus, daher ist es tatsächlich überhaupt nicht intuitiv, weil in anderen Tabellen steht die Patnr nochmal anders da ^^'
 
Dann versuch es mal mit dem beispielhaften JOIN, den ich oben gepostet habe. Musst ihn nur noch vervollständigen, weil sich das am Handy nur schlecht tippen lässt und ich es etwas gekürzt habe.
Ergänzung ()

Ganz wichtiger Zusatz: Schau dir den Link von @madmax2010 an, weil es verschiedene JOINs gibt.

Ein JOIN erzeugt grundsätzlich eine temporäre Tabelle, die sich aus den gejointen Daten zusammensetzt. D.h. eine Zeile enthält in meinem Beispiel alle Daten aus der einen und die dazugehörigen Daten (anhand der patnr) aus der anderen Tabelle. Anschließend wählt man mit WHERE welche Zeile man haben möchte.

Aber: JOINs sind Schnittmengen aus mehreren Tabellen, hier zwei. Es gibt aber verschiedene. Ein inner join zeigt zB nur Datensätze zu denen es in beiden Tabellen einen Eintrag zu der patnr gibt. Sollen auch die Ärzte ohne dazugehörige patnr aus der anderen Tabelle angezeigt werden - dann mit leeren Datenfeldern aus der aufnahme-Tabelle - oder andersherum, auch Aufnahmedaten ohne dazugehörigen Arzt, benötigst du einem anderen JOIN. Siehe dazu die Schnittmengengrafik im @madmax2010 link.
 
Zuletzt bearbeitet:
Bezüglich der Tabelle 'Arzt' mit den Spalten 'Art' und 'Text' schau Dir mal die Pivot-Funktion an, damit fasst Du Ergebnisse zusammen und drehst Zeilen in Spalten.
 
Die Tabelle 1 ist natuerlich auch maximal undankbar, man will hier fuer eine generische Spalte separate Spalten erzeugen - dafuer nimmt man uberlicherwiese die PIVOT Funktion

Wer hat sich denn das Schema ausgedacht fuer Tabelle 1? Warum wurden denn nicht Spalten fuer die 5 Wertetypen in der "Art" Spalte genutzt?

Wie gewaehrt man eigentlich den Bezug der 5 Zeilen zueinander? Die beziehen sich ja auf eine OP, oder? Verlasst ihr euch da auf die Reihenfolge der Zeilen in der Tabelle?
 
  • Gefällt mir
Reaktionen: scooper33
Die Tabellen wurden vom Software Hersteller so angelegt vor 6 Jahren. Die Namen führen in die Irre, so ist die Arzt Tabelle eine Tabelle, wo Daten von einem individuell angelegten Formular ankommen. Das Formular ist eine op Anmeldung, die Datenfelder dort sind alle im der Arzt Tabelle unter „Art“ aufgeführt und was dort eingetragen wird vom Personal taucht unter „text“ auf. Ich Filter die Patienten mit den eindeutigen Aufnahmenummern, bei den Patienten liegt das Formular mit den eindeutigen feldbezeichnungen unter „Art“ und davon soll das Textfeld ausgegeben werden welches in der Spalte „Text“ zu finden ist. Für lediglich einen Wert ist dies sehr einfach, für euch bestimmt auch das was ich möchte aber so gut kenn ich mich leider noch nicht aus.
Morgen auf der Arbeit versuche ich die Abfrage mal mit einem join zu versehen und anschließend pivot zu nutzen. 😊
 
Zurück
Oben