仅当单个列不止一次存在时才获得结果

时间:2019-09-20 03:29:05

标签: tsql

好的,在这种情况下,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

2 个答案:

答案 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 

这应该获得预期的结果。谢谢。