在标题上道歉,不确定我能否轻松/很好地解释这一点。我继承了一份从表格运行的报告 (StockMovements)。此表包含产品编号、机芯类型和数量(其中,这三个是重要值)。该报告使用 ProductMaster 表,并为每个产品编号尝试按产品分组,然后为每个移动类型设置一列,汇总所有匹配的条目。目前它正在做这样的事情:
SELECT PM.ProductNumber,
(SELECT SUM(Quantity) FROM StockMovements WHERE MovementType='StockIn' AND ProductNumber=PM.ProductNumber) AS [StockIn],
(SELECT SUM(Quantity) FROM StockMovements WHERE MovementType='StockOut' AND ProductNumber=PM.ProductNumber) AS [StockOut],
(SELECT SUM(Quantity) FROM StockMovements WHERE MovementType='ClosingStock' AND ProductNumber=PM.ProductNumber) AS [ClosingStock]
FROM ProductMaster AS PM
GROUP BY PM.ProductNumber
这正在扼杀系统,因为 StockMovements 是一个巨大的表,正如您所看到的,它正在对每种产品和每种运动类型进行新的查找。我正在尝试修改存储过程以从按 ProductNumber 分组的 StockMovements 中驱动 SELECT,但我正在努力了解如何根据 MovementType 对每个不同的列求和值。我喜欢的是这样的:
SELECT ProductNumber,
SUM(Quantity) WHERE MovementType='StockIn',
SUM(Quantity) WHERE MovementType='StockOut',
SUM(Quantity) WHERE MovementType='ClosingStock'
FROM StockMovement
GROUP BY ProductNumber
我非常愿意重写整个这一切,并把它从最有意义的地方赶走,我只是在努力寻找一种更好的方法(请告诉我这很简单,我也刚刚开始这样做长)。