排名前10位,除非计数为零

时间:2010-06-09 01:33:00

标签: sql count

这可能很容易,但我不知道。 SQL server2005 我想要显示前100名,但如果没有100只想显示那些而不在结果中包含零计数

SELECT    TOP (100) UserName, FullName_Company, FullName,
                      (SELECT  COUNT(*)
                        FROM          dbo.Member_Ref
                        WHERE      (RefFrom_UserName = dbo.view_Members.UserName) AND (RefDate >= '5/1/2010') AND (RefDate <= '6/1/2010')) 
                  AS RefFromCount           
FROM         dbo.view_Members
WHERE (MemberStatus = N'Active')
ORDER BY RefFromCount DESC

我尝试过使用Group By和HAVING COUNT(*)&gt; 0都使用相同的错误结果

3 个答案:

答案 0 :(得分:3)

考虑:

SELECT TOP (100) UserName, FullName_Company, FullName,
                      (SELECT  COUNT(*)
                        FROM          dbo.Member_Ref
                        WHERE      (RefFrom_UserName = dbo.view_Members.UserName) 
                          AND (RefDate >= '5/1/2010') AND (RefDate <= '6/1/2010')) 
                        HAVING COUNT(*) > 0
                  AS RefFromCount           
FROM         dbo.view_Members
WHERE (MemberStatus = N'Active')
ORDER BY RefFromCount DESC

内部查询中添加的HAVING子句将固有地删除0个计数的结果。

答案 1 :(得分:1)

我加入了一个包含数量的子查询,并在第I部分中按数量过滤&gt; 0

SELECT TOP (100) UserName, FullName_Company, FullName, Quantity AS RefFromCount          
FROM         dbo.view_Members
JOIN (
    SELECT RefFrom_UserName, COUNT(*) as Quantity
    FROM          dbo.Member_Ref
    WHERE      (RefDate >= '5/1/2010') AND (RefDate <= '6/1/2010')
    GROUP BY RefFrom_UserName
) as Q on Q.RefFrom_UserName = dbo.view_Members.UserName
WHERE (MemberStatus = N'Active')
AND Quantity > 0
ORDER BY RefFromCount DESC

答案 2 :(得分:0)

SQL Server 2005在MySQL中是否有类似“限制”的关键字? (如果是这样,对于这种任务有一个非常简单的解决方案)