Select 值来自一个 table 基于一个匹配值和一个可能匹配也可能不匹配的值

Select value from one table based one matching value and one value that may or may not match

我试图从一行中获取一个值 table 匹配一个值并匹配或选择下一个壁橱较低的值。请参阅 table 示例,我提供了一种一次一行完成此操作的方法。

Table 供应商成本

Part Quantity Cost
BLK CAT 20 5
BLK CAT 50 4
BLK CAT 100 3
BLK CAT 250 2
BLK CAT 500 1
WHT CAT 5 68
WHT CAT 25 50
WHT CAT 60 25

Table 更新前价格突破

Part Quantity Cost
BLK CAT 25
BLK CAT 50
BLK CAT 80
BLK CAT 100
BLK CAT 200
WHT CAT 10
WHT CAT 25
WHT CAT 50

Table 更新后价格突破

Part Quantity Cost
BLK CAT 25 5
BLK CAT 50 4
BLK CAT 80 4
BLK CAT 100 3
BLK CAT 200 3
WHT CAT 10 68
WHT CAT 25 50
WHT CAT 50 50

到目前为止我的更新声明

Update #StandardPList Set UnitCost = VC.Cost
From #StandardPList
  Inner Join 
      (
        Select PartNum, Cost
        From #VendorCost
        Where PartNum = @PartNum
        And BreakQty = (
                Select Top 1 Max(BreakQty) As NextLowBrk 
                From #VendorCost
                Where PartNum = @PartNum And BreakQty < @Qty
                )
      ) VC On #StandardPList.PartNum = VC.PartNum And #StandardPList.Quantity = @Qty

您不需要加入。只需更新价格区间 table 并使用相关子查询获取小于或等于价格区间数量的最大数量的成本。

update #standardplist
set unitcost = 
(
  select top(1) vc.cost
  from #vendorcost vc
  where vc.partnum = #standardplist.partnum
  and vc.breakqty <= #standardplist.quantity
  order by vc.breakqty desc
);

通常情况下,这是您不应该做的事情。该成本已在您的数据库中可用,并且可以在需要时查询。通过将其再次存储在价目表 table 中,您引入了冗余。这是我们在数据库中避免的事情,因为冗余很容易导致不一致。

但是,如果供应商成本 table 可能会发生变化,但标准价目表成本将保持不变,那么这将不再是冗余,因为存储的成本可能不同于当前的供应商成本。那我就不反对了