2016-02-20 3 views
0

Я пытаюсь, чтобы мой оператор then был счетчиком определенного столбца, и он не работает. Когда я выбираю 1 else 0, он подсчитывает встречи, и я хочу, чтобы он учитывал уникальных пациентов независимо от того, сколько встреч у них было.Агрегатная функция в сумме, когда

select 
sum (case when soc.tobacco_user_c in (1, 2, 4, 5) then 1 (**want to have this be 
                  count(pat.pat_id - which is 
                  varchar**) 
                else 0 end) Compliant 
,sum(case when soc.tobacco_user_c in (1, 2, 3, 4, 5) then 1 else 0 end) TotalEligible, 
dep.DEPARTMENT_NAME 

from table 1 enc 
inner join table2 soc on enc.PAT_ENC_CSN_ID = soc.PAT_ENC_CSN_ID 
inner join table3 ser2 on enc.pcp_prov_id = ser2.prov_id 
inner join table4 dep on ser2.PRIMARY_DEPT_ID = dep.DEPARTMENT_ID 
inner join patient table5 pat on enc.pat_id = pat.pat_id 
where dep.department_id in ('100501201', '100502502', '100504501', '100607501', '100801804', '100801809', '200101101', 
'200201201', '200401401', '2013011301', '2016011601') 
group by dep.DEPARTMENT_NAME 

ответ

0

Я думаю, что вы можете использовать COUNT с DISTINCT на поле, которое вы хотите посчитать:

COUNT(DISTINCT CASE WHEN soc.tobacco_user_c IN (1, 2, 4, 5) THEN pat.pat_id END) AS Compliant 
+0

это дает ошибку, что преобразование не удалось при преобразовании VARCHAR к типу данных междунар – agalgay

+0

я до сих пор имел еще в моем заявлении. Я перечитывал ваш и исправлял, и это сработало. Спасибо!!! – agalgay

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