2011-09-27 33 views
0

这应该很简单。我正在使用SSMS 2008,试图获得只有一列的总和。问题是我目前在这一列上进行分组,并使用HAVING语句。我如何获得总记录数> 1的总和?这是我目前的T-SQL逻辑:T-sql中的简单SUM

select count(*) as consumer_count from #consumer_initiations 
group by consumer 
having count(1) > 1 

但这个数据是这样的:

consumer_count 
---------------- 
2 
2 
4 
3 
... 
+1

获取的记录数是不一样越来越总和。 –

回答

3

总结呢?

SELECT SUM(consumer_count) 
FROM (
    select count(*) as consumer_count from #consumer_initiations 
    group by consumer 
    having count(1) > 1 
) AS whatever 
1

随着嵌套查询:

select sum(consumer_count) 
FROM (

    select count(*) as consumer_count from #consumer_initiations 
    group by consumer 
    having count(1) > 1 
) as child 
1
select sum(t.consumer_count) 
    from (select count(*) as consumer_count 
       from #consumer_initiations 
       group by consumer 
       having count(1) > 1) t 
0

尝试:

select sum(t.consumer_count) from 
(
    select count(*) as consumer_count from #consumer_initiations 
    group by consumer 
    having count(1) > 1 
) t 

这会给你的纪录,你原来的查询返回的总和。这些类型的查询称为嵌套查询。

0

除了在另一个查询包裹,你可以这样做:

SELECT COUNT(*) AS consumer_count 
FROM #consumer_initiations AS a 
WHERE EXISTS 
     (SELECT * 
     FROM #consumer_initiations AS b 
     WHERE b.consumer = a.consumer 
      AND b.PK <> a.PK    -- the Primary Key of the table 
    )