【发布时间】:2016-12-15 16:27:17
【问题描述】:
我有一个提供一些库存结果的查询。该查询查看项目编号并与库存表连接并检索库存量 (InStock)
SUM(di.[Count])as Requested,
ISNULL(mt.qty,0) as InStock,
然后我得到的是这样的结果:
这是正确的,但我希望能够将 InStock 的金额减去之前记录的金额。
我尝试过的方法很明显,但没有奏效:
(ISNULL(mt.qty, 0) - SUM(di.[Count])) as Inventory,
我正在研究类似的东西,但之前从未使用过 Partition 或 Over :
sum(mt.qty) over (order by di.InventoryNumber asc) as Inventory
以下是我的完整查询:
SELECT ISNUll(mt.cart,'Not Assigned') as Cart,
c.ClientName AS Client,
di.InventoryNumber AS IMS_Number,
SUM(di.[Count])as Requested,
ISNULL(mt.qty,0) as InStock,
(ISNULL(mt.qty, 0) - SUM(di.[Count])) as Inventory,
CASE di.IsManual
WHEN 0 THEN 'Auto'
WHEN 1 THEN 'Manual'
END As Operation,
CASE WHEN mt.item IS NULL THEN 'New' ELSE 'In Stock' END as Availability,
CASE jl.LocationId
WHEN 0 THEN 'Both'
WHEN 1 THEN 'Bond'
WHEN 2 THEN 'Woodlands'
END AS Location,
CAST (di.ItemDescription AS TEXT) as Descriptions,
di.ItemType AS [Type]
FROM linwdc1f.eFulfillment2.dbo.DailyInventoryView di
INNER JOIN linwdc1f.eFulfillment2.dbo.JobConfigs jc ON di.JobName=jc.JobName
INNER JOIN linwdc1f.eFulfillment2.dbo.Clients c ON di.ClientId=c.ClientId
INNER JOIN linwdc1f.eFulfillment2.dbo.JobLocations jl ON jl.JobName = di.JobName AND jl.LocationId=2
LEFT OUTER JOIN linwdc1f.eFulfillment2.dbo.printjobs pj on pj.JobName =di.JobName
LEFT OUTER JOIN linwdc1f.eFulfillment2.dbo.PrintComponents pc on pc.id = pj.PrintComponentId
LEFT OUTER JOIN linwdc1f.eFulfillment2.dbo.ProjectJobs prj on prj.id = pc.ProjectJobId
LEFT OUTER JOIN Master mt on di.InventoryNumber = mt.item
WHERE di.JobDate BETWEEN '2016-08-08' AND '2016-08-08' AND prj.ProjectJobName IS NULL
GROUP BY c.ClientName, mt.cart, di.InventoryNumber,c.ClientName ,mt.qty,mt.item,jl.LocationId,di.ItemDescription,di.ItemType,di.IsManual
Order by di.InventoryNumber,c.ClientName, mt.cart
【问题讨论】:
-
你探索过 Lag/Lead 吗?
-
你有什么版本的sql-server?
-
要利用滞后/领先优势,您需要一些东西来订购该数据。您是否有订单 ID 字段来订购您提供的示例数据?
-
Chris@ 2014 专业,是的,IMS_Number 字段是唯一的。
-
根据您的说法,很难给出答案。您的问题需要对数据集进行某种排序,而您提供的数据集并没有给出产生这种排序的任何条件。
标签: sql-server tsql select sum