2012-06-18 29 views
1

我有了答案质疑here:转换Excel中Forumla到MySQL查询

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

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

两个把工作做不过是极其缓慢。我相信我需要用SQL来做这件事,而不是使用数十万行。

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

我想我可以把我独特的供应商放在一个表中,然后将我的产品插入表中,同时将vendorsIDvendors表中拉出。

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

问题是如何查询此查询?查询一个表,用产品和供应商ID填充另一个表认为但我明白,实际上我需要的计算(每个供应商的匹配产品数量)我完全失去了。

有什么建议吗?

回答

1

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

厂商:

  • IdName

产品:

  • IdVendorIdName ...

然后,为了:

算多少产品名称是由相同供应商。

你应该这样做:

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 

编辑2:要更新已有供应商列表的现有表,应更新通过与结果接合它的表中设置

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 
+0

并将其插入到另一张桌子?谢谢!! – lcm

+0

我想执行类似于您的示例的计数并将查询的结果插入另一个表中。合理? – lcm

+0

将非常好,知道如何做一个脚本来执行这个查询,当我上传数据到一个特定的表,但我想这是另一个问题... – lcm