TSQL - 如何找到名称类似于表达式且另一个字段的计数大于 1 的行?

TSQL - How can I find rows where the name is like an expression and another field has a count greater than 1?

我需要查找客户具有特定名称并且购买了超过 1 件相同商品的实例。

我以为它会像下面这样,但我收到一条错误消息,指出聚合可能不会出现在 where 子句中。

我也试过 HAVING 但我不确定语法。

SELECT 
    cust.FirstName, cust.LastName, prod.ProductNumber, prod.Name
FROM 
    Ours.Customer as cust
INNER JOIN 
    Ours.SalesOrderMaster as som ON cust.CustomerID = som.CustomerID
INNER JOIN 
    Ours.SalesOrderDetail as sod ON som.SalesOrderID = sod.SalesOrderID
INNER JOIN 
    Ours.Product as prod ON sod.ProductID = prod.ProductID
WHERE 
    cust.FirstName LIKE 'Joe' AND Count(prod.ProductID) > 1;

您可以使用 group by 子句对数据进行分组,然后使用 having 子句过滤这些组。

除非我误解了你的问题,否则我认为这可能是你想要的:

SELECT cust.FirstName, cust.LastName, prod.ProductNumber, prod.Name
FROM Ours.Customer as cust
INNER JOIN Ours.SalesOrderMaster as som ON cust.CustomerID = som.CustomerID
INNER JOIN Ours.SalesOrderDetail as sod ON som.SalesOrderID = sod.SalesOrderID
INNER JOIN Ours.Product as prod ON sod.ProductID = prod.ProductID
WHERE cust.FirstName LIKE 'Joe' 
GROUP BY cust.FirstName, cust.LastName, prod.ProductNumber, prod.Name
HAVING Count(prod.ProductID) > 1;

这将首先应用 where 子句过滤掉所有名字为 Joe 的行,然后按名称和产品编号对行进行分组,并过滤​​出计数 > 1 的那些组。