Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在使用案例时,如何计算满足特定条件的不同用户数_Sql_Sql Server - Fatal编程技术网

Sql 在使用案例时,如何计算满足特定条件的不同用户数

Sql 在使用案例时,如何计算满足特定条件的不同用户数,sql,sql-server,Sql,Sql Server,简言之,我正在处理医疗索赔数据,并试图计算出拥有两个或更多诊断代码和感兴趣的诊断代码的患者id总数 medical_索赔表如下所示: claim_id | patient_id | icd_code ---------+------------+--------- 01 | 111 | 150 02 | 111 | 200 03 | 222 | 150 04 | 222 | 1999

简言之,我正在处理医疗索赔数据,并试图计算出拥有两个或更多诊断代码和感兴趣的诊断代码的患者id总数

medical_索赔表如下所示:

claim_id | patient_id | icd_code
---------+------------+---------
01       | 111         | 150
02       | 111         | 200
03       | 222         | 150
04       | 222         | 1999
05       | 333         | 150
06       | 333         | 200
07       | 333         | 205
08       | 333         | 210
我只想包括icd代码=150、200、205、210中任何一个大于等于2的不同患者id。结果输出仅包括患者id=111和333

我认为CASE-WHEN可能是最有效的方法,但不确定如何正确设置

我目前正试图这样构建它,但它只提供了不同icd_代码值的分布:

我只想包括icd代码=150、200、205、210中任何一个大于等于2的不同患者id

您可以使用聚合并具有:

我只想包括icd代码=150、200、205、210中任何一个大于等于2的不同患者id

您可以使用聚合并具有:


因此,如果一个给定的患者有两行ICD=150,你会包括或排除该患者?这实际上是一个很好的观点。如果包括/排除该情况,情况会是什么样子?因此,如果给定的患者有2行ICD=150,您将包括或排除该患者?这实际上是一个非常好的观点。如果该条件被包括/排除,会是什么样子?谢谢,这非常有用!如何计算>=2个icd代码值的不同患者id的总数?@David。您可以将此查询用作CTE或子查询,并使用COUNT*。很抱歉延迟-我尝试使用COUNT*运行子查询,但无法使其工作。你能告诉我你会怎么做吗?再次感谢你@大卫。我不明白你的评论。你是说这不起作用吗?当我尝试使用COUNT*作为子查询时,我一直得到一个错误。我尝试了几种不同的方法,但我认为我的设置不正确。谢谢,这很有帮助!如何计算>=2个icd代码值的不同患者id的总数?@David。您可以将此查询用作CTE或子查询,并使用COUNT*。很抱歉延迟-我尝试使用COUNT*运行子查询,但无法使其工作。你能告诉我你会怎么做吗?再次感谢你@大卫。我不明白你的评论。你是说这不起作用吗?当我尝试使用COUNT*作为子查询时,我一直得到一个错误。我尝试了几种不同的方法,但我认为我的设置不正确
SELECT 
    COUNT(CASE WHEN icd_code = '150' then 1 ELSE NULL END) as "150",
    COUNT(CASE WHEN icd_code = '200'  then 1 ELSE NULL END) as "200",
    COUNT(CASE WHEN icd_code = '205'  then 1 ELSE NULL END) as "205",
    COUNT(CASE WHEN icd_code = '210'  then 1 ELSE NULL END) as "210"
FROM medical_claims
select mc.patient_id
from medical_claims mc
where mc.icd_code in (150, 200, 205, 210)
group by mc.patient_id
having count(distinct mc.icd_code) >= 2;