SQLServer:我需要在任意组合中添加2个数字(甚至不止一次)总和应超过第三个数字,但应是最接近的数字

wqlqzqxt  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(277)

下面是我在SQLServer中的表中的一行。

Drug Unit Vial1 Vial2 Vial3
  X    55    50    12

--**--

Drug = X
Unit = 55
Vial1 = 50
Vial2 = 12
Vial3 = Null

医生给病人注射了55单位(柱单位)的x药。他可以选择2 x小瓶1=100,这意味着他可以使用55注射,丢弃45(不能储存打开的小瓶以备将来使用)。
或者他可以使用5 x vial2=60,这意味着他可以使用55注射,丢弃5。
或者他可以使用1 x vial1+1 x vial2=62,这意味着他可以使用55注射,丢弃7。
同样地,他可以使用任何组合(例如2 x vial2+1 x vial1)。
我需要找出哪个组合最接近单位(组合应该等于或超过单位)。在这种情况下,它是5 x vial2。
我需要一个sql代码来解决这个问题。对不起,我想不出什么主意。
谢谢大家!
你好,thamizhamudhan.r

t30tvxxf

t30tvxxf1#

您可以为此使用递归cte:

with t as (
      select 'X' as drug, 55 as unit, 50 as vial1, 12 as vial2
     ),
     cte as (
      select drug, unit, vial1, vial2, 0 as num1, 0 as num2, 1 as lev
      from t
      union all
      select drug, unit, vial1, vial2, num1 + 1, num2, lev + 1
      from cte
      where num1 * vial1 + num2 * vial2 < unit
      union all 
      select drug, unit, vial1, vial2, num1 , num2 + 1, lev + 1
      from cte
      where num1 * vial1 + num2 * vial2 < unit
     )
select top (1) cte.*
from cte
where num1 * vial1 + num2 * vial2 >= unit
order by num1 * vial1 + num2 * vial2 - unit;

这是一把小提琴。
这是另一个例子,所有三瓶。

相关问题