首页 > 解决方案 > SQL Server 需要找到提供最不同产品的供应商

问题描述

我有两张表我需要从中获取信息,Products并且Suppliers. 这两个表都有一个SupplierID列,我试图用它来将它们连接在一起以检索正确的信息。

我需要的输出是SupplierIDContactName来自Suppliers表。正确的输出应该只包含两个供应商,所以我尝试了这样的事情,但是在将 nvarchar 值转换为数据类型 int 时遇到了转换错误。我不应该计算他们提供了多少产品,但聚合函数对我来说似乎是最好的方法。

SELECT TOP 2 ContactName, COUNT(Products.SupplierID) AS Supply
FROM Products 
LEFT JOIN Suppliers ON Suppliers.ContactName = Products.SupplierID
GROUP BY Products.SupplierID, Suppliers.ContactName
ORDER BY Supply;

我尝试了许多不同的查询,但没有一个会起作用。我对如何加入这些表而不遇到错误感到困惑。所有产品也有一个唯一的 ProductID。正确的输出应该是这样的:

   7     John Smith
  12     John Sample

标签: sqlsql-servertsqlgroup-by

解决方案


这两个表都有一个 SupplierID 列,我试图用它来将它们连接在一起以检索正确的信息

如果是这样,您应该跨表加入该列。

此外,使用表别名并在每列前面加上它所属的表是一个很好的做法。

另一句话是,如果您想要销售最多不同产品的供应商,那么您希望按降序(而不是升序)排序。

最后,如果你想left join,那么你应该从供应商开始,然后引进产品,而不是相反。

考虑:

select top 2 
    s.SupplierID,
    s.ContactName, 
    COUNT(*) as Supply
from Suppliers s
left join Products p on p.SupplierID = s.SupplierID
group by s.SupplierID, s.ContactName
order by Supply desc;

推荐阅读