我回答了问题here:
=SUMPRODUCT(($A$1:$A$10=A1)*($B$1:$B$10=B1))
和
=COUNTIFS(G:G,G2,H:H,H2)
两者都完成了工作但是非常慢。我相信我需要使用SQL而不是十万行。
我想知道的是如何在SQL中完成相同的数字?
我想我可以将我独特的供应商放在一个表格中,然后将我的产品插入表格,同时从vendorsID
表中提取vendors
。
此时我将有两个表...在vendors
表中我可以为每个供应商的产品数添加另一列(如上面链接中所述)和产品表name和vendorID。
问题是这个查询怎么样?查询一个表以使用产品和供应商ID填充另一个表想想我明白然而实际上我需要的计算(每个供应商的匹配产品数量)我完全迷失了。
有什么建议吗?
答案 0 :(得分: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 ... SELECT
Syntax,例如:
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
答案 1 :(得分:1)
假设表结构为excel,即一个表:http://sqlfiddle.com/#!2/fb9f3/1
SQL如下:
SELECT vendor, product, SUM(qty) from tblOrder
GROUP BY vendor, product