我有一个名为Z_N_FullRetailTable的简单表,它有一个Item_Number、Color_Code和零售价格。
我手动创建了这个表。然而,有时我们会添加项目到我们的收集,所以我需要这个表更新与新的项目和它的零售价格。
我想要做的就是对我们的Orders表运行一个查询。查看在Retail表中不存在的所有已订购的商品,并将它们添加到零售表中,并将其作为零售价加上它的第一个销售价格。
这是我写的查询。它会找到除零售表中已经存在的项目之外的所有已订购的商品。
Select LTRIM(RTRIM(TT.Item_Number)) Sku, LTRIM(RTRIM(TT.Color_Code)),
TT.Retail Retail
From
(
Select Distinct
Item_Number
,Color_Code
From Order_Detail O
Where O.Customer_Number = 'Ecom2x' AND ISNUMERIC(O.Customer_Purchse_Order_Number) <> 0
EXCEPT
Select
Z.Sku
,Z.Color
From Z_N_FullRetailTable Z
) T --Gets List of Missing SKUs
LEFT JOIN
(
Select Distinct
Item_Number
,Color_Code
,MAX(O.Price) OVER (Partition by O.Item_Number) Retail
From Order_Detail O
Where O.Customer_Number = 'Ecom2x' AND ISNUMERIC(O.Customer_Purchse_Order_Number) <> 0
) TT ON T.Item_Number = TT.Item_Number and T.Color_Code = TT.Color_Code我怎么能把它变成一天一次的工作呢?
另外,有没有办法让它从2019年的订单中得到它的最高价格,而不是所有时候的订单。但如果该商品不是在2019年订购的,那么它就会退回,并从2018年的订单中获得最高价格,以此类推。还是太复杂了?
发布于 2019-08-05 22:15:31
个人注意:您应该养成在代码中使用模式的习惯,例如:
From Order_Detail O 应该是
From dbo.Order_Detail O对于你的“如何使这成为一项每天运行一次的工作”的问题:
一旦您完善了查询,我就会将其转换为存储过程。然后,在SSMS内部,在Server代理下,然后在作业-右键单击职务,单击新作业。在“一般”标签中:
在Steps选项卡中:
附表中的标签
对于你的“按最近一年获得最高价格”这样的问题,我会这样做:
; WITH prices AS (SELECT Item_Number, Price
, rn = ROW_NUMBER() OVER (Partition by Item_Number ORDER BY Year(OrderDate?) DESC, Price DESC))
SELECT *
FROM prices
WHERE rn = 1https://stackoverflow.com/questions/57366026
复制相似问题