使用子查询计算特定行

时间:2011-03-09 16:13:02

标签: sql sql-server

我有一个用于报告的查询。每行是包含病史的一行数据,每个病史都会重复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`

3 个答案:

答案 0 :(得分:6)

使用CASE获取相关行的1sum这些行就足够了:

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