首页 > 解决方案 > 有什么方法可以使用 IN 和 COUNT 重写此查询?

问题描述

select count(patientNUM) as totalpatients
from [dbo] (nolock)
where patientId in (
'97210219',
'97210221',
'97210222'
)

50
100
20

因此,每个患者 ID 都包含患者数量,100、20 或 50。我想遍历每个患者行并将它们作为部分或全部丢失。例如,如果有 50 个患者 ID 行中的 40 个,它将列为部分。如果为 50,它将列为已满。有没有办法同时使用 count 或 in ?

所以基本上我想在第二列中创建两列,patientID 和 fullorpartial。

有没有办法遍历每一行并计算每一行,然后返回并比较第二列中的结果?

标签: sqlsql-servercount

解决方案


因为我不知道您的数据到底是什么样子以及您想要什么。但是试试这个:

使用over是一个不错的选择

select patientId,count(patientNUM) over(partition by patientId) as totalpatients
from [dbo] (nolock)
where patientId in (
'97210219',
'97210221',
'97210222'
)

这将计算每个患者 ID 的患者NUM 次。

关于'partialorfull' col 我认为可以通过使用来实现case

case
when patientId = '97210219' and totalpatients < 50 then 'partial'
when ......   --condition keep going on
else 'full'
end as partialorfull

推荐阅读