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 的那些组。
我需要查找客户具有特定名称并且购买了超过 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 的那些组。