2016-10-10 1 views
0

SQL Server 2008: Ich muss die eindeutige Accountid, die nur auf einem Set aber nicht anderen sind, anzeigen.SQL Server: wie die Konto-ID angezeigt wird, die nur auf einem Set aber nicht anderen sind

Zum Beispiel: Ich muss Accountid mit Medikamenten (Warfarin, Enoxaparin, Rivaroxaban usw.) mit Dokumenttyp nur von DMR anzeigen. Accountid mit dem Dokumenttyp hml, adm und dmr sollte nicht angezeigt werden. oder Konto mit mehreren Dokumenttypen sollte vermieden werden. Unten ist mein Code und Ergebnisse:

Jede Hilfe wird geschätzt. Dank

Ergebnis:

AccountID Visit_OID DocumentType GenericName DocumentStatus CollectedDTime 
1011  101   ADM  rivaroxaban Complete 10/3/16 15:14 
1011  101   HML  rivaroxaban Complete 10/3/16 12:48 
1011  101   DMR  rivaroxaban Complete 10/3/16 10:17 
1012  102   DMR  apixaban Complete 10/4/16 10:48 
1012  102   HML  apixaban Complete 10/3/16 19:21 
1013  103   DMR  warfarin Complete 10/5/16 12:45 
1014  104   HML  warfarin Complete 10/4/16 15:25 
1015  105   DMR  warfarin Complete 10/6/16 12:57 

Wunschergebnis:

AccountID Visit_OID DocumentType GenericName DocumentStatus CollectedDTime 
1013  103   DMR  warfarin Complete 10/5/16 12:45 
1015  105   DMR  warfarin Complete 10/6/16 12:57 
+0

Können Sie Beispieldaten bereitstellen, mit denen wir arbeiten können? Es ist schwierig, diese Abfrage neu zu schreiben, wenn Sie sie nicht testen können. –

Antwort

0

Versuch:

SELECT DISTINCT 
    v.AccountID AS AccountID, 
    x.Visit_OID, 
    x.DocumentType, 
    m.GenericName, 
    m.DocumentStatus, 
    x.CollectedDTime 
FROM 
    PatientVisit v INNER JOIN 
    (SELECT 
     Visit_OID, 
     collectedDTime, 
     DocumentType 
    FROM 
     XMLDocStorage x LEFT OUTER JOIN 
     (SELECT 
      Visit_OID 
     FROM 
      XMLDocStorage 
     WHERE 
      collectedDTime >= '20161001 00:00:00' AND 
      collectedDTime < '20161011 00:00:00' AND 
      DocumentType <> 'dmr' 
     GROUP BY 
      Visit_OID  ) d ON 
     x.visit_oid = d.visit_oid 
    WHERE 
     collectedDTime >= '20161001 00:00:00' AND 
     collectedDTime < '20161011 00:00:00' AND 
     d.visit_oid IS NULL) x ON 
    v.Visit_oid = x.Visit_OID INNER JOIN 
    (SELECT 
     storageoid, 
     GenericName, 
     DocumentStatus 
    FROM 
     MedList 
    WHERE 
     (m.GenericName LIKE '%warfarin%' 
     OR m.GenericName LIKE '%enoxaparin%' 
     OR m.GenericName LIKE '%rivaroxaban%' 
     OR m.GenericName LIKE '%apixaban%' 
     OR m.GenericName LIKE '%dabigatran etexilate%' 
     OR m.GenericName LIKE '%edoxaban%') 
     AND m.DocumentStatus ='Complete' ) m ON 
    x.storageoid = m.storageoid 

Sie benötigen zu begrenzen Ergebnisse von XMLDocStorage nur mit IDs mit Ihrem Zielwert (DMR), sollten alle IDs mit anderen documentTypes ausgeschlossen werden.

+0

Vielen Dank, es hat funktioniert. –

+0

Hinweis Ich habe die obere Grenze von collectedDTTime geändert, ich wollte nicht, dass Sie Zeilen an diesem letzten Tag verpassen. – Beth

0
SELECT DISTINCT a.AccountID AccountID, b.Visit_OID, b.DocumentType, 
    c.GenericName, c.DocumentStatus, b.CollectedDTime 
FROM PatientVisit a 
    JOIN XMLDocStorage b 
     ON b.Visit_oid = a.Visit_OID 
    JOIN MedList c 
     ON c.storageoid = b.storageoid 
WHERE (c.GenericName LIKE '%warfarin%' OR 
    c.GenericName LIKE '%enoxaparin%' OR 
    c.GenericName LIKE '%rivaroxaban%' OR 
    c.GenericName LIKE '%apixaban%' OR 
    c.GenericName LIKE '%dabigatran etexilate%' OR 
    c.GenericName LIKE '%edoxaban%') 
    AND b.collectedDTime BETWEEN '20161001 00:00:00' 
          AND '20161010 00:00:00' 
    AND c.DocumentStatus ='Complete' 
    And not exists (Select * From XMLDocStorage 
        Where Visit_oid = a.Visit_OID 
         and DocumentType != 'DNR') 
+0

Das Ergebnis war null, wenn ich oben Abfrage –

+0

versuchte Dann hat jeder Datensatz in PatientVisit ein XMLDocStorage Dokument, das nicht documentType 'DNR' ist. Ist das das Kriterium? "mit Medikamenten (Warfarin, Enoxaparin, Rivaroxaban usw.) mit nur Dokumententyp dmr" –

+0

Der von Ihnen genannte Dokumententyp, der auf 'DNR' beschränkt sein muss - ist es der Dokumenttyp in der 'XMLDocStorage' Tabelle? denn das ist kein Attribut der Medikation. Basierend auf der Aussage "Ich muss AccountID mit ** Medikamenten ** (Warfarin, Enoxaparin, Rivaroxaban etc.) mit Dokumenttyp nur von DMR anzeigen", würde ich annehmen, dass es ein Attribut der Tabelle "MedList" sein sollte. Vermissen Sie ein Join-Kriterium zwischen 'MedList' und den' XMLDocStorage' Tabellen? –

Verwandte Themen