2013-04-03 5 views
0

Я хочу рассчитать количество пациентов, которые в настоящее время не принимаются (CurrentClinicalInfo = 'False'). Тем не менее, на одного пациента приходится несколько ClinicalInfo с. Поэтому мне нужно выбрать отчетливо.SELECT DISTINCT with COUNT

Я пробовал этот код ниже, но он содержит слишком много столбцов, приводящих к ошибкам дальше.

SELECT DISTINCT COUNT(*) AS TableLength 
    FROM   PatientDemographics AS p LEFT OUTER JOIN 
          PatientClinicalinformation AS pc ON p.PatientID = pc.PatientID 
    WHERE  (pc.PatientID IS NULL) AND (p.FirstName LIKE '%' + + '%') OR 
          (pc.PatientID IS NULL) AND (p.Surname LIKE '%' + + '%') OR 
          (p.FirstName LIKE '%' + + '%') AND (pc.CurrentClinicalInfo = 'False') OR 
          (p.Surname LIKE '%' + + '% 
    ') AND (pc.CurrentClinicalInfo = 'False') 
+0

** Количество (Distinct CurrentClinicalInfo) ** – Luv

+4

Мое предложение было бы запустить это без агрегат первый, чтобы убедиться, у вас есть правильные записи, а затем применить 'COUNT()'. Затем, если вы хотите подсчитать разные строки, вы будете использовать 'count (distinct ClinicalInfos)'. – Taryn

+0

@will Можете ли вы предоставить образец вывода, который вы желаете. – Santhosh

ответ

1

Вы хотите отличных пациентов, правильно?

SELECT COUNT(DISTINCT p.PatientID) AS TableLength 
FROM PatientDemographics AS p 
LEFT JOIN PatientClinicalinformation AS pc ON p.PatientID = pc.PatientID 
WHERE pc.PatientID IS NULL AND p.FirstName LIKE '%' + @input + '%' 
     OR 
     pc.PatientID IS NULL AND p.Surname LIKE '%' + @input + '%' 
     OR 
     p.FirstName LIKE '%' + @input + '%' AND pc.CurrentClinicalInfo = 'False' 
     OR 
     p.Surname LIKE '%' + @input + '%' AND pc.CurrentClinicalInfo = 'False' 
+0

Отлично работает, как я могу сделать то же самое с SELECT Distinct TOP ([number]) * ... с тем же материалом из FROM'? –