子查询问题

时间:2011-02-16 04:40:47

标签: sql sql-server-2005

我有两张这样的表

会员及其购买

我需要像这样的输出

Member_ID | CountofProducts

(产品价值不应为0且购买状态= 1)

SELECT     
    MemberName,
    (SELECT COUNT(*) AS Count
     FROM dbo.Purchases 
     WHERE MemberName = dbo.Members.MemberName
       AND Res_Status = 1) AS Count 
FROM   
   dbo.Members

我可以从上述查询中获得他们的总CountofPurchased Products,但我需要避免他们count=0如何做到这一点?

2 个答案:

答案 0 :(得分:4)

您可以尝试类似

的内容
SELECT  m.MemberName, 
        COUNT(p.*) Cnt 
FROM    Members m INNER JOIN 
        Purchases p     ON  m.MemberName = p.MemberName 
WHERE   p.Res_Status = 1 
GROUP BY    m.MemberName

不需要HAVING子句,因为INNER JOIN将排除没有购买的会员中的所有条目。

答案 1 :(得分:1)

SELECT   m.MemberName, COUNT(p.*) AS CountOfProducts
FROM     Members m
INNER    JOIN Purchases p ON m.MemberName = p.MemberName
WHERE    p.Res_Status = 1
GROUP BY m.MemberName
HAVING   COUNT(p.*) > 0

我认为以上会有所作为。关键是您可能甚至不需要子查询,而是只使用连接就可以处理查询(可能效率更高)。