-1

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

我想检索所有购买过商品 x 的发票超过 2 张的客户,但我只想要总共购买了超过 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 
4

1 回答 1

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 中的相同记录,它们将再次出现。在这里阅读更多

于 2013-06-10T23:12:09.410 回答