我正在尝试从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
答案 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