2010-06-09 59 views
1

这可能很容易,但没有回避。 SQL Server2005中 我想显示前100,但如果没有100只希望显示这些并没有包括在结果前10名除非计数为零

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试过零个计数(*)> 0都具有相同的错误结果

回答

1

我加入一个子查询与数量,并在部分地方被我过滤量> 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 
+0

这样做,非常感谢你 – datatoo 2010-06-09 02:09:32

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计数。

+0

谢谢,我试过了,它仍然返回100个项目,但RefFromCount为NULL,表示先前显示为0的列表的余额。我想如果有100个,则显示100个项目,或者如果全部存在,则只显示90个项目。 – datatoo 2010-06-09 01:54:19

+0

HAVING COUNT(*)> 0不会返回NULL,它会显示并且用户数为零? – user347594 2010-06-09 01:56:53

+0

我也期待得到,但这就是我得到的结果 – datatoo 2010-06-09 02:11:36

0

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

+0

它有一个TOP运算符 – Madhivanan 2010-06-09 08:23:07