我需要编写一个SQL查询,它将返回所有订单号,这些订单号不仅仅是SKU
ENROLL
,而且不应该返回订单号,因为SKU
ENROLL
是订单上唯一的SKU
。
在本例中,此顺序将包含在查询结果中。
Order1001
,包含SKU
ENROLL
和SKU
688631
。
在本例中,查询结果中将不包括此顺序。
订单1003
,包含SKU
ENROLL
需要注意的是,当返回查询结果时,它们如下所示
这是我到目前为止写的,但其余的我不确定。我从每个人那里得到了反馈,他们都做出了回应,并试图将其纳入其中,但都没有取得好的效果。
选择VO.DistID、VO.FirstName、VO.LastName、VO.OrderNumber、Email、Quantity、Sku,订单状态从dbo.VwOrders作为VO INNER JOIN dbo.VwDistributor作为VD ON VO.DistID=VD.DistID INNER JOIN dbo.VwOrderLines作为VOL ON VO.OrderNumber=VOL.OrderNumber INNER JOIN dbo.VwInventory作为VI ON VOL.ItemNumber=VI.InventoryNo和VOL.Warehouse=VI.Warehouse其中Sku='注册'
最佳答案
有几种不同的方法可以做到这一点。下面是一个使用条件聚合的选项:
select orderid
from yourtable
group by orderid
having max(case when sku = 'ENROLL' then 1 else 0 end) = 1
and max(case when sku != 'ENROLL' then 1 else 0 end) = 1
SQL Fiddle Demo