0
TablePatient.Patient_ID(PK) 

TableProviders.Encounter (joins to PK) 

TableProviders.Provider_Type 

TableProviders.Provider_ID 

TableNames.Full_Name 

TableNames.Provider_ID (joins to Table Names) 

möchte ich eine Abfrage, die jeder Provider ID für für alle Patient_IDs, die Full_Name des Anbieters geben.Bessere Lösung als Links Join-Unterabfragen?

Es gibt etwa 30 provider_types.

Ich habe dies bereits mit einer linken Joins eine Tonne von Links Joins gemacht. Es dauert eine lange Zeit zu laufen und ich denke, dass es einen Trick gibt, den ich vermisse.

Irgendwelche Hilfe?

Antwort

0

Ok, meine Antwort brachte nicht das, was Sie gemeint. Sie möchten die Tabelle so drehen, dass sie in jeder Zeile eine Patient_ID mit jeder Full_name für jede provider_type enthält. Ich nehme an, dass jeder Patient nur einen Anbieter für einen Typ hat und nicht mehr; Wenn Sie mehr haben, haben Sie mehr als eine Zeile für jeden Patienten, und ich denke sowieso nicht, dass es wirklich möglich ist.

Hier ist meine Lösung mit Pivot. Der erste Teil soll es verständlicher machen, also erstelle ich in einer Unterabfrage eine Tabelle mit dem Namen TABLE_PATIENT.

WITH TABLE_PATIENT AS 
( 
SELECT TablePatient.Patient_ID, 
TableProviders.Provider_Type, 
TableNames.Full_Name 


FROM TablePatient LEFT JOIN 
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN 
TableNames on TableNames.Provider_ID = TableProviders.Provider_ID 

group by TablePatient.Patient_ID, 
TableProviders.Provider_Type, 
TableNames.Full_Name 
) 

SELECT * 
FROM TABLE_PATIENT 
PIVOT 
(
    min(Full_name) 
    for Provider_type in ([type1], [type2],[type3]) 
) AS PVT 

So TABLE_PATIENT hat nur viele Zeilen für jeden Patienten, mit einem Anbieter jede Zeile, und die Schwenk setzt alles auf einer einzigen Zeile. Sag mir, wenn etwas nicht funktioniert.

Sie müssen jeden gewünschten Typ in [type1], [type2] usw. schreiben. Legen Sie sie einfach in [], kein anderes Zeichen als 'oder irgendetwas anderes benötigt.

Wenn Sie nur einige Typen eingeben, zeigt die Abfrage keine Anbieter anderer Typen an.

Sag mir, wenn etwas nicht funktioniert.

+0

Großartig. Das hat super funktioniert. Vielen Dank. – JoshuaB

+0

Froh, das zu hören. Könnten Sie mir bitte meine Antwort bestätigen? :) – BD01

+0

Gibt es eine Möglichkeit, einen "CASE" zur Ausgabe hinzuzufügen? Ich habe "*" und auch "TABLE_PATIENT. *" Und "T. *" versucht, nachdem ich einen Alias ​​"T" für "TABLE_PATIENT" erstellt habe, aber nichts davon hat funktioniert. – JoshuaB

0

Wenn ich verstehe, was Sie meinen, wollen Sie nur die Antwort nach Patienten-ID und dann Provider-ID gruppieren. Ein vollständiger Name ist eindeutig auf einer Anbieter-ID richtig?

so etwas wie

SELECT TablePatient.Patient_ID, 
TableProviders.Provider_ID, 
TableNames.Full_Name 


FROM TablePatient LEFT JOIN 
TableProviders on TablePatient.Patient_ID = TableProviders.Encounter 
LEFT JOIN 
TableNames on TableNames.Provider_ID = TablerProviders.Provider_ID 

group by TablePatient.Patient_ID, 
TableProviders.Provider_ID, 
TableNames.Full_Name 

Sie können entweder Gruppe von TableNames.Full_Name oder wählen First(TableNames.Full_Name) zum Beispiel in der Tat Dies sollte, wenn ein vollständiger Name an einen Provider-ID eindeutig ist.

Hinweis: Ich habe den SQL-Server Syntax, kann es différences mit Oracle ..

+0

Lassen Sie mich klären: Jede "Patienten-ID" ist eine Zeile. Es sollte eine Spalte für jeden "Provider-Typ" geben. Diese Spalten sollten den vollständigen Namen des Providers enthalten. – JoshuaB

+0

Gibt es nur eine Provider-ID für einen Provider-Typ? Oder Sie können mehrere IDs für nur einen Typ haben? Jetzt, da Sie klarstellen, verstehe ich besser. Sie müssen einen Drehpunkt ausführen. Antworten Sie einfach, wenn die Beziehung zwischen Provider-ID und Provider-Typ eindeutig ist und ich den Code schreiben kann. Andernfalls suchen Sie nach "Pivot" im Web – BD01

+0

Es gibt mehrere Providertypen und es gibt mehrere Provider-IDs. – JoshuaB