好的,在这种情况下,distinct是行不通的,因为它不是单个列修饰符,而是整个结果修饰符,不确定要使用的是什么,我正在进行Adventureworks练习:
查询到现在为止我已经完成:
select SalesOrderID, UnitPrice
from SalesOrderDetail
inner join Product
on SalesOrderDetail.ProductID = Product.ProductID
这是原始语句,不包含“区别”部分,这些是我得到的结果,如您所见,我得到了多个重复的ID,并且问题要求我仅获得“单个项目订单”,即只包含一个细节
SalesOrderID UnitPrice
71774 356.90
71774 356.90
71776 63.90
71780 218.45
71780 461.69
71780 113.00
71780 818.70
71780 323.99
71780 149.87
71780 809.76
71780 1376.99
71780 158.43
71780 1391.99
答案 0 :(得分:2)
您可以尝试在SalesOrderID
处进行汇总,然后保留最低单价:
SELECT
sod.SalesOrderID,
MIN(p.UnitPrice) AS UnitPrice
FROM SalesOrderDetail sod
INNER JOIN Product p
ON sod.ProductID = p.ProductID
GROUP BY
sod.SalesOrderID
HAVING
COUNT(*) = 1;
之所以起作用,是因为对于仅具有一种产品的销售订单,最低单价与该唯一单价是一致的。
请注意,我假设每个销售订单至少都有一个与其相关的产品记录。内部联接将过滤掉没有产品的销售订单。
答案 1 :(得分:2)
Select OD.SalesOrderID, UnitPrice
from SalesOrderDetail as OD
inner join Product as P
on OD.ProductID = P.ProductID
inner join (select SalesOrderId
from SalesOrderDetail
GROUP BY SalesOrderId
HAVING COUNT(1) = 1) as OneOD on OneOD.SalesOrderId = OD.SalesOrderId
这应该获得预期的结果。谢谢。