1

我在这里有一个问题的答案

=SUMPRODUCT(($A$1:$A$10=A1)*($B$1:$B$10=B1))

=COUNTIFS(G:G,G2,H:H,H2)

两者都完成了工作,但是速度非常慢。我相信我需要用 SQL 来做这件事,而不是用十万多行。

我想知道的是如何在 SQL 中完成相同的数字?

我想我可以将我独特的供应商放在一张桌子上,然后将我的产品插入一张桌子,同时将我vendorsID的产品从桌子上拉出来vendors

此时我将有两个表...在vendors表中我可以为每个供应商的产品数量添加另一列(如上面的链接中所述)和一个包含产品名称和供应商 ID 的产品表。

问题是这个查询看起来如何?查询一个表以使用产品和供应商 ID 填充另一个表,我认为我理解但实际上进行我需要的计算(每个供应商的匹配产品数量)我完全迷失了。

有什么建议么?

4

2 回答 2

1

假设您已经填充了两个表:

供应商:

  • Id, Name.

产品:

  • Id, VendorId, Name...

然后,为了:

计算供应商有多少相同的产品名称。

您应该执行以下操作:

SELECT v.Id, v.Name, COUNT(p.Id) AS 'Total Products'
FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId
GROUP BY v.Id, v.Name

编辑:如果要将从此查询中获得的结果集插入到另一个表中,则应使用INSERT ... SELECTSyntax,例如:

INSERT INTO NewTable(VendorId, VendorName, ProductsCount)
SELECT v.Id, v.Name, COUNT(p.Id) AS 'Total Products'
FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId
GROUP BY v.Id, v.Name

Edit2:要更新已经有供应商列表的现有表,您应该通过将表与结果集连接来更新表

UPDATE ExistingTable t
INNER JOIN 
(
    SELECT v.Id, v.Name, COUNT(p.Id) AS 'TotalProducts'
    FROM Vendors v INNER JOIN Products p ON v.Id = p.VendorId
    GROUP BY v.Id, v.Name
) v ON t.VendorId = v.Id
SET t.VendorId = v.Id, t.VendorName = v.Name, t.ProductsCount = v.TotalProducts 
于 2012-06-18T07:45:26.327 回答
1

假设表结构如 excel 即一张表:http ://sqlfiddle.com/#!2/fb9f3/1

SQL 将如下所示:

SELECT vendor, product, SUM(qty) from tblOrder 
GROUP BY vendor, product 
于 2012-06-18T07:45:53.900 回答