“UPDATE得分SET points = red_chips WHERE red_chips> current_turn“
我希望得分等于几种不同的芯片颜色组合,但MAXIMUM任何单独的芯片颜色都可以给你的点数必须受current_turn的限制,如果芯片颜色较高则默认只加入current_turn。
“UPDATE得分SET points = red_chips + blue_chips + green_chips + yellow_chips + white_chips“
^这个但是每个颜色单独受current_turn限制为最大值。
我正在寻找一种方法来做到这一点,而无需为每种芯片颜色进行新的查询。
答案 0 :(得分:1)
我认为您正在寻找的是LEAST(current_turn, [xyz]_chips)
。如果芯片值小于current_turn
,则将使用芯片值,如果芯片值大于current_turn
,则使用current_turn
的值。
也就是说,如果你希望点数等于所有芯片值的总和,每个值都限制在UPDATE score SET points = LEAST(current_turn, red_chips) + LEAST(current_turn, blue_chips) + LEAST(current_turn, green_chips) + LEAST(current_turn, yellow_chips) + LEAST(current_turn, white_chips)
的值,你需要这样的东西:
[xyz]_chips
假设current_turn
值包含实际净值(校正每种颜色的值)。取决于[xyz]_chips
相对于芯片值/颜色的代表,您可能希望通过芯片相对值来倍增。但是,如果您正在寻找芯片的数量,不一定要考虑颜色,或者MIN
列是否包含颜色调整值,那么您应该没问题。
另外,为了澄清我的编辑,LEAST
是一个聚合函数,它作用于从行中查找最小值的列。 NULL
接受两个或多个参数并返回具有最小值的参数(如果其中任何一个是NULL
,则返回Select
BoxNumber,
sum(CAST(AnalyteVal AS DECIMAL(10,2))) as [DesiredSum]
from Food
where analyte in ('ana1','ana3','ana4') and ISNUMERIC(AnalyteVal)=1
group by BoxNumber
),因此它将作用于每个单独行的值。 / p>