2015-11-05 3 views
-1

В этом запросе я пытаюсь получить счет, который дает мне количество пациентов для каждой практики в данных условиях.Отказ от статьи

Проблема в том, что я должен показать пациентов, которые имели> = 3 посещения офиса в прошлом году.

Count (D.PID)

в списке выбора игнорирует

HAVING COUNT (admitdatetime)> = 3

Вот мой запрос

select distinct D.PracticeAbbrevName, D.ProviderLastName, count(D.pid) AS Count 

from PersonDetail AS D 
left join Visit AS V on D.PID = V.PID 

where D.A1C >=7.5 and V.admitdatetime >= (getdate()-365) and D.A1CDays <180 and D.Diabetes = 1 

group by D.PracticeAbbrevName, D.ProviderLastName 

having count(admitdatetime)>=3 

order by PracticeAbbrevName 

Если я избавлюсь от функции count для D.pid и просто покажу каждый PID отдельно, моя фраза работает правильно.

Есть что-то о счете, и теперь у нас все работает правильно.

+0

Вы не можете отобразить каждый PID индивидуально с такой 'группы by'. Пожалуйста, покажите свой результат и почему это неверно. – GSerg

+0

ПРИМЕЧАНИЕ: 'COUNT (column)' не совпадает с 'COUNT (столбец DISTINCT)'. (Также использование 'SELECT DISTINCT' с' GROUP BY' почти всегда избыточно, но не то, что вызывает вашу проблему здесь) – RBarryYoung

+0

, когда я отображаю каждый PID индивидуально, я добавляю PID для группировки. В качестве примера, для одного имени поставщика, COUNT равно 21, но когда я выбираю индивидуальный идентификатор PID, есть 2. Когда я удаляю оператор утверждения для отдельного PID, он переходит к 21 уникальному PID –

ответ

0

Пересмотренный ответ:

SELECT DISTINCT 
    D.PracticeAbbrevName, 
    D.ProviderLastName, 
    COUNT(D.pid) AS PIDCount, 
    COUNT(admitdatetime) AS AdmitCount 
FROM 
    PersonDetail AS D 
    LEFT JOIN Visit AS V 
    ON D.PID = V.PID 
WHERE 
    D.A1C >= 7.5 
    AND V.admitdatetime >= (GETDATE() - 365) 
    AND D.A1CDays < 180 
    AND D.Diabetes = 1 
GROUP BY 
    D.PracticeAbbrevName, 
    D.ProviderLastName 
HAVING 
    COUNT(admitdatetime) >= 3 
ORDER BY 
    PracticeAbbrevName 
+3

Я довольно уверен, что 'having' может или не может соответствовать' select', и у меня есть запросы, где это не так. – GSerg

+0

ни один из них не является правильным. Я хочу выбрать счетчик PID, но мне нужно иметь способ показать количество PID, где admitdatetime> = 3 за последние 365 дней. –

0

Вы пытаетесь сделать слишком много за один раз. Разделить логику в 2 этапа:

  1. Группировка запросов по PID, чтобы отфильтровать пациентов, которые не соответствуют вашим критериям.
  2. Группировка запросов практикой, чтобы получить количество пациентов.

Ваш запрос будет выглядеть следующим образом:

;with EligiblePatients as (
    select d.pid, 
      d.PracticeAbbrevName, 
      d.ProviderLastName 
     from PersonDetail d 
     left join Visit v 
     on v.pid = d.pid 
     and v.admitdatetime >= (getdate()-365) 
    where d.A1C >= 7.5 
     and d.A1CDays < 180 
     and d.Diabetes = 1 
    group by d.pid, 
       d.PracticeAbbrevName, 
       d.ProviderLastName 
    having count(v.pid) >= 3 
) 
select PracticeAbbrevName, 
     ProviderLastName, 
     COUNT(*) as PatientCount 
    from EligiblePatients 
group by PracticeAbbrevName, 
      ProviderLastName 
order by PracticeAbbrevName 
Смежные вопросы