我有一个用于报告的查询。每行是包含病史的一行数据,每个病史都会重复client_id
。
我按client_id
进行分组并总结了他们的条件,但我想使用子查询来查找超出预设分数的任何条件。我当前的查询给出了整个表格的总计,而不仅仅是特定的client_id
。
有人可以帮帮我吗?谢谢!
这是我的查询:
select
DATEADD(month, DATEDIFF(month, 0, taken_on), 0),
client_id,
count(hscore),
sum(hscore),
(select count(hscore)
from amexmedscreen
where hscore >= '3.5')
from amexmedscreen
group by taken_on, client_id`
答案 0 :(得分:6)
使用CASE
获取相关行的1
和sum
这些行就足够了:
select
...
sum(hscore),
sum(CASE WHEN hscore >= 3.5 THEN 1 ELSE 0 END)
group by taken_on, client_id`
答案 1 :(得分:1)
您的子查询是一个单独的查询。它不受主查询中发生的事情的限制。您需要告诉它只对外部查询中当前记录的client_id进行计数。您将在两个不同的查询中两次引用同一个表,因此您必须为每个查询使用不同的别名。
这样的事情应该有效:
select DATEADD(month, DATEDIFF(month, 0, taken_on), 0),
client_id,
count(hscore),
sum(hscore),
(select count(hscore)
from amexmedscreen subq
where
hscore >= '3.5'
and subq.client_id = outerq.client_id )
from amexmedscreen outerq
group by taken_on, client_id
答案 2 :(得分:0)
select DATEADD(month, DATEDIFF(month, 0, taken_on), 0),
client_id,
count(hscore),
sum(hscore),
tb1.COUNT_HSCORE
from amexmedscreen
INNER JOIN
(select client_id, count(hscore) as COUNT_HSCORE
from amexmedscreen
where hscore >= '3.5'
group by client_ID) as tb1
ON tb1.client_id = client id
group by taken_on, client_id,tb1.COUNT_HSCORE