2016-10-10 2 views
0

SQL Server 2008: Мне нужно разобраться с уникальным аккаунтом, который находится только на одном наборе, но не на других.SQL Server: как отобразить учетную запись, которая находится только на одном наборе, но не на других.

Например: Мне нужно отображать учетную запись с помощью лекарств (варфарин, эноксапарин, ривароксабан и т. Д.) С типом документа только из dmr. Учетная запись, имеющая тип документа hml, adm и dmr, не должна отображаться. или учетной записи с несколькими типами документов следует избегать. Ниже приведен мой код и результаты:

Любая помощь приветствуется. Благодаря

Результат:

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 

Желаемый результат:

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

Можете ли вы предоставить образцы данных для нас для работы? Трудно переписать этот запрос, если вы не можете его протестировать. –

ответ

0

попробовать:

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 

вам нужно ограничить результаты от XMLDocStorage по идентификаторам с заданным вами значением (DMR), любые идентификаторы с другими documentTypes должны быть исключены.

+0

Спасибо, что это сработало. –

+0

note Я изменил верхнюю границу на собранномDTTime, я не хотел, чтобы вы пропускали строки в последний день. – 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

Результаты были null, когда я попытался выполнить запрос –

+0

. Затем каждая запись в PatientVisit имеет документ XMLDocStorage, который не является DocumentType 'DNR'. Это критерии? «с лекарствами (варфарин, эноксапарин, ривароксан и т. д.) с типом документа только dmr« –

+0

Тип документа, который вы упоминаете, должен быть ограничен «DNR» - это тип документа в таблице «XMLDocStorage»? потому что это не атрибут Лекарства. Основываясь на заявлении «Мне нужно отображать учетную запись с ** лекарствами ** (варфарин, эноксапарин, ривароксабан и т. Д.) Только с типом документа только dmr», я бы предположил, что он должен быть атрибутом таблицы «MedList». Вам не хватает критериев соединения между таблицами «MedList» и «XMLDocStorage»? –

Смежные вопросы