我的查询为我提供了我需要的所有信息,但这太多了,我花了太多时间在excel中处理数据。
我需要一个查询,向我显示包含特定SKU(项目)和该顺序中所有其他SKU的订单号。
我还有另一个查询,显示我需要的特定SKU。但是,它消除了该顺序的其他部分。我的查询说,例如,向我显示所有订单“其中im.Sku如'91323-10-0'或im.Sku如'02105-10-0'”
上面的SKU是枕头。假设我订购了一个枕头(91626-10-0)和一件T恤(95523-22-L)。订单号为0999928767463320008。
我当前的查询不会在数据中生成T恤。
select
p.TrackingNumber
,im.Sku
,convert(text,oh.OrderNumber) as 'OrderNumber'
,convert(date,oh.ShipTime) as 'OrderDate'
,oh.BusinessUnitCode
,oh.OrigShipCode
,oh.ShipCode
,p.ShipWeight
,oh.ShipToRegion
from dmhost.tblOrderHeader oh
join dmhost.tblContainer c on oh.OrderHeaderID = c.OrderHeaderID
join dmhost.tblPackage p on c.ContainerID = p.ContainerID
join dmhost.tblContainerContents cc on c.ContainerID = cc.ContainerID
join dmhost.tblItemMaster im on im.ItemMasterID = cc.ItemMasterID
where (oh.ShipTime between '05/1/2019' and '05/24/2019')
and oh.OrigShipCode like '028'
and oh.ShipCode like '071'
and (im.Sku like '02105-10-0' or im.Sku like '91323-10-0') --Pillow SKUs
order by oh.OrderNumber
此代码将为我提供19年5月1日至19年5月23日之间运出的所有枕头。
但是,例如,T恤不会出现。
答案 0 :(得分:-1)
有关子查询的评论是一个很好的答案。通过查看您的查询和5个层次的深度来从给定订单获取sku,您基本上需要重做两次联接的所有表...一次获取内部合格的PQ(PreQuery别名),该PQ(PreQuery别名)根据sku获取DISTNCT订单您正在寻找的#s。有了明确的顺序后,然后返回其余细节,并获取该顺序内的所有组件。
为帮助您节省步骤,我在那儿时已预取了所有ORDER标头字段。这样,您不必只为这些值而返回标题。
select
p.TrackingNumber,
im.Sku,
pq.OrderNumber',
pq.OrderDate',
pq.BusinessUnitCode,
pq.OrigShipCode,
pq.ShipCode,
p.ShipWeight,
pq.ShipToRegion
from
( select distinct
oh.OrderNumber
convert(text,oh.OrderNumber) as 'OrderNumber',
convert(date,oh.ShipTime) as 'OrderDate',
oh.BusinessUnitCode,
oh.OrigShipCode,
oh.ShipCode,
oh.ShipToRegion
from
dmhost.tblOrderHeader oh
join dmhost.tblContainer c
on oh.OrderHeaderID = c.OrderHeaderID
join dmhost.tblContainerContents cc
on c.ContainerID = cc.ContainerID
join dmhost.tblItemMaster im
on cc.ItemMasterID = im.ItemMasterID
where
oh.ShipTime between '2019-05-01' and '2019-05-24'
and oh.OrigShipCode like '028'
and oh.ShipCode like '071'
--Pillow SKUs
and (im.Sku like '02105-10-0' or im.Sku like '91323-10-0') ) pq
join dmhost.tblContainer c
on pq.OrderHeaderID = c.OrderHeaderID
join dmhost.tblPackage p
on c.ContainerID = p.ContainerID
join dmhost.tblContainerContents cc
on c.ContainerID = cc.ContainerID
join dmhost.tblItemMaster im
on cc.ItemMasterID = im.ItemMasterID
order by
pq.OrderNumber
如果从订单到sku的关联较短,则可能会缩短该关联。如 OrderHeader-> OrderDetails(项目)-> Items(每个项目都有sku),显然可以使查询更紧凑。
此外,写SQL的个人喜好是缩进。显示表A如何到达表B,以及表B如何到达表C,等等,这给后面的任何人都提供了视觉上的疑问,可以更直观地了解关系。