SQL自定义单位转换
我正在寻找一种用于SQL中自定义单位转换的解决方案,我公司使用的数据库是Microsoft SQL
Server,因此我需要编写一个SQL以返回基于“单位转换表”的转换因子
说:
Item: chicken wings (itemid 1001)vendor: food wholesale ltd (vendorid 5000)
unitid: gram (id=10)
unitid: kilogram (id=500)
unitid: boxes (id=305)
Quantity: 1000 grams = 1kgs = 5 boxs
单位换算表:
itemid | vendorid | unit1id | unit2id | quantity1 | quantity21001 5000 10 500 1000 1
1001 5000 500 305 1 5
问题:如果我有10盒,以克为单位的鸡翅的期末存货是多少?
如何编写此sql返回“转换因子”?
提前致谢
回答:
我认为递归表最好找到从您期望的单位到期望的单位之间的路径。这样的事情(这假设数据库中如果存在路径a-> b-> c,也存在路径c-> b->
a。如果没有,则可以对其进行修改以搜索两个方向) 。
select 1001 as itemID ,5000 as vendorID
,10 as fromUnit
,500 as toUnit
,cast(1000 as float) as fromQuantity
,cast(1 as float) as toQuantity
into #conversionTable
union
select 1001
,5000
,500
,305
,1
,5
union
select 1001
,5000
,305
,500
,5
,1
union
select 1001
,5000
,500
,10
,1
,1000
declare @fromUnit int
,@toUnit int
,@input int
set @fromUnit = 305 --box
set @toUnit = 10 --gram
set @input = 10
;with recursiveTable as
(
select 0 as LevelNum
,ct.fromUnit
,ct.toUnit
,ct.toQuantity / ct.fromQuantity as multiplicationFactor
from #conversionTable ct
where ct.fromUnit = @fromUnit
union all
select LevelNum + 1
,rt.fromUnit
,ct.toUnit
,rt.multiplicationFactor * (ct.toQuantity / ct.fromQuantity)
from #conversionTable ct
inner join recursiveTable rt on rt.toUnit = ct.fromUnit
)
select @input * r.multiplicationFactor
from
(
select top 1 * from recursiveTable
where (fromUnit = @fromUnit
and toUnit = @toUnit)
) r
以上是 SQL自定义单位转换 的全部内容, 来源链接: utcz.com/qa/408684.html