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 可能会发生变化,但标准价目表成本将保持不变,那么这将不再是冗余,因为存储的成本可能不同于当前的供应商成本。那我就不反对了
我试图从一行中获取一个值 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 可能会发生变化,但标准价目表成本将保持不变,那么这将不再是冗余,因为存储的成本可能不同于当前的供应商成本。那我就不反对了