使用SQL检索数据

时间:2013-06-10 22:10:46

标签: sql

我正在尝试从SQL获取数据,但我遇到了一些困难。

我想检索已经购买了超过2张发票的所有客户,他们已经购买了这篇文章x,但我只想要购买本文的客户超过2个单位。

我编写的查询仅选择已生成2张以上发票的客户。

SELECT clientcode 
FROM   invoice f 
       INNER JOIN invoicedetails fd 
               ON f.idinvoice = fd.idinvoice 
WHERE  fd.itemcode IN ('FA02096103') 
       AND f.clientcode <> '00000' 
       AND CONVERT(DATETIME, CONVERT(VARCHAR(10), dtfatures, 103), 103) >= 
           CONVERT(DATETIME, '20/01/2013', 103) 
       AND CONVERT(DATETIME, CONVERT(VARCHAR(10), dtfatures, 103), 103) <= 
           CONVERT(DATETIME, '30/01/2013', 103) 
GROUP  BY clientcode 
HAVING Count(f.clientcode) >= 2 

1 个答案:

答案 0 :(得分:0)

您撰写的查询与您的描述不一致。

  

你说:“我想要检索所有超过2的客户   他们购买了文章x的发票,但我想要的   购买本文总数超过2的客户   单位“。

以下是我将如何处理它。假设您有以下表格:

  • 客户
  • 发票

    SELECT 
        c.CustomerID, SUM(i.Units) 
    FROM Customers c
    INNER JOIN Invoices i ON i.CustomerID = c.CustomerID
    WHERE 
        i.PurchasedItem = 'X'
    GROUP BY CustomerID
    HAVING SUM(i.Units) > 2
    

确保您了解内部联接的工作方式,如果其中一个表包含重复记录,则内部联接将返回比预期更多的记录。所以基本上,对于表A中的每条记录,它将返回表B中的所有匹配记录,如果表A中的下一条记录与表B中的相同记录匹配,它们将再次出现。阅读更多here