Ich brauche eine neue Reihe von Augen auf diese Abfrage. Ohne in diesem Code mega tief zu gehen, ist mein Problem, dass ich eine linke Verknüpfung mache, um aus der TXP_Digital_Signatures (tds) -Tabelle zu ziehen, die Signaturen auf die aktuellste Version von Behandlungsplänen (txp_master txp) speichert. Was dieser Code macht, bringt Ergebnisse zurück, wobei tds.signed null (keine Signatur) oder mit N (Nein) markiert ist. Das funktioniert, aber was dieser Bericht getan hat, ist Leuten zu zeigen, welche No's ja werden müssen, aber das lässt das Nein zurück, also wenn es ein jüngeres Ja gibt, dann ist das Nein in dieser Version der tds.plan_id immer noch ziehe die plan_id dorthin, wo ich sie nicht mehr haben möchte, wo der letzte Signaturstatus ein Y (yes) usw. ist. Der unten stehende Codeausschnitt fügt der where-Anweisung hinzu, verbirgt aber alle No's, auch wenn es kein neueres Y gibt (ja).Verwenden einer korrelierten Unterabfrage in einem linken Join
tds.date = (select Max(date) from TXP_Digital_Signatures where tds.plan_id = txp.plan_id)
Kann jemand denken Sie an einen Weg, um eine korrelierte Unterabfrage auf der linken Seite kommen, um entweder mehr, so dass es nur die max (tds.date) für jede tds.plan_id zieht oder wie meine, wo Aussagen zu überarbeiten, so dass die Neins ohne ein neueres ja und die nulls zeigen sich immer noch. Ich möchte wirklich nicht den ganzen Bericht als einen gruppierten Bericht wiederholen, wenn ich ihm helfen kann, wo ich fühle, dass es eine Menge Zeug auf mir brechen wird, und im Grunde habe ich diesen Bericht von Grund auf neu erstellen. SQL 2008 R2
SELECT case_status,
CONVERT(CHAR(10), episode_open_date, 101)AS 'Enrolled' ,
txp.patient_id,
p.lname+', ' + p.fname AS 'Client',
CONVERT(CHAR(10), txp.effective_date, 101)AS 'Effective',
CONVERT(CHAR(10), next_review_date, 101)AS 'Review',
txp.signed,
(SELECT location_code FROM staff s WHERE s.staff_id = txp_coordinator_id) AS 'Clinic',
(SELECT s.lname+', ' +s.fname FROM staff s WHERE s.staff_id = txp_coordinator_id) AS 'Coordinator',
(SELECT s.lname+', ' +s.fname FROM staff s WHERE s.staff_id = ts.team_member_id) AS 'Team',
ts.signed,
tds.signed as 'Patient Sig'
FROM txp_master txp join patient p ON p.patient_id = txp.patient_id and p.episode_id = txp.episode_id
join txp_signature ts on ts.plan_id = txp.plan_id and ts.version_no = txp.version_no and ts.team_member_id <> txp.txp_coordinator_id
left join TXP_Digital_Signatures tds on tds.plan_id = txp.plan_id
where p.case_status = 'A' and
txp.status <> 'er' and patient_signed_date is null
and tds.signed is null or tds.signed = 'N'
and txp.effective_date > '2016-12-31 00:00:00.000'
and tds.date = (select Max(date) from TXP_Digital_Signatures where tds.plan_id = txp.plan_id)
order by patient_id
ändern. Ich bin ein wenig verwirrt. Wo stelle ich die Unterabfrage? Nur in der Auswahl? Das zeigt an, wie hoch das maximale Datum ist, aber es verbirgt die N Ergebnisse nicht mit einem neueren Ja in den Ergebnissen. Ich bin auch ein wenig verwirrt darüber, wie du willst, dass ich meine Runde umstelle. Ich möchte Ergebnisse unabhängig von TXP_Digital_signatures, wo ich die Null-Ergebnisse, die keine Signatur haben, aber nicht genau, was Sie von Ihrer Beschreibung zu ändern brauchen. Danke und Entschuldigung, ich bin ein Code-Noob. –
Der Vorschlag ist, dass die letzte Zeile Ihres Codes so aussehen sollte. Das Problem mit dem von Ihnen geposteten Code ist, dass 'tds' nicht auf die Instanz von TDS in dieser Unterabfrage verweist, sondern auf die im Hauptteil der Abfrage. Es braucht einen eigenen Alias. –
Jede 'WHERE'-Klausel, die auf tds verweist (außer' tds.field = NULL'), filtert Fälle aus, in denen kein TDS-Datensatz vorhanden ist. Wenn Sie das nicht möchten, müssen Sie diese Zeilen in die ON-Klausel für den entsprechenden JOIN verschieben. –