当前位置: 首页 > 面试题库 >

SQL自定义单位转换

浦墨竹
2023-03-14
问题内容

我正在寻找一种用于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 | quantity2

1001 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


 类似资料:
  • Nutz.Dao 提供了大多数简单的操作,在80%以上的情况下,你并不需要编写 SQL,因为 Nutz.Dao 会自动替你 生成可以使用的 SQL。但是,在某些特殊的情况下,尤其是考虑到效率等问题,直接写作 SQL 仍然是程序员们 的一个杀手锏,有了这个杀手锏,程序员们永远可以针对任何数据库做他们想要的任何操作。 在之前的时代,很多程序员将 SQL 代码同 Java 代码混杂在一起,即所谓的硬编码

  • 问题内容: 一个快速的问题。我有一个查询,该查询带回2列“说明”和“金额”。在说明中,我们有3个结果。 “金-拥有”,“铜-没有土地”和“银-已识别/提供” 我希望结果按金,银,铜的顺序显示 Order By Asc或Desc无法实现此目的。有没有一种方法可以自定义Order by子句? 任何对此的帮助将不胜感激,Rusty 问题答案: 在内,您可以将数字赋给每个数字并按升序排列。如果您需要查询大

  • 1. 简介 分析云作为企业进行全域用户行为数据分析的数据中台,需要满足企业不同业务角色的各类差异化分析需求。 其中,对于企业深度结合业务模式的定制化需求,分析云平台提供了“自定义SQL查询”的功能,支持业务人员自行编辑复杂的 SQL 查询语言,实现对平台数据仓库中最底层的细粒度用户行为数据进行分析操作,以获取当前分析云平台既有数据模型无法覆盖的个性化分析需求的结果。 2. 使用说明 当前 sql

  • 我需要帮助在postgresql insert中转义单引号。我正在使用ETL工具从源中提取数据并加载到postgresql数据库中。Select语句包含一些变量。 例如,我的选择查询是 变量的值为。这句话给了我一个错误 而不是被加载到postgres表中。谁能帮我分析单引号,我应该如何在变量中使用单引号?

  • 1. 小程序更多菜单功能说明 为了支持 App 内的不同业务需求、支持不同类型的分享,当前 SDK 支持配置更多菜单,按类型可分为 onMiniProgram 和 common 类型(均在管理后台配置) common: 该类型无需小程序添加额外处理 onMiniProgram: 该类型菜单在点击时,会向小程序获取数据用以提供给 App 的业务处理 如果菜单的按钮类型是 onMiniProgram

  • 自定义菜单是指为单个应用设置自定义菜单功能,所以在使用时请注意调用正确的应用实例。 $config = [ 'corp_id' => 'xxxxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxx', // 应用的 secret //... ]; $app = Factory::work($config); 创建菜单 $menus = [