【发布时间】:2017-01-11 02:03:01
【问题描述】:
我有一个表,它的 ID 将包含多个存储桶字段中的数据。我想要一个函数来拉出一个桶的总和,但是函数参数将包括开始和结束桶字段。
所以,如果我有这样一张桌子:
ID Bucket0 Bucket30 Bucket60 Bucket90 Bucket120
10 5.00 12.00 10.00 0.0 8.00
如果我发送 ID 和参数 Bucket0、Bucket0,它将只返回 Bucket0 字段中的值:5.00
如果我发送 ID 和参数 Bucket30、Bucket120,它将返回从 30 到 120 或 (12+10+0+8) 30.00 的桶的总和。
除了一个巨大的丑陋之外,还有更好的方法来写这个
if parameter1=bucket0 and parameter2=bucket0
then select bucket0
else if parameter1=bucket0 and parameter2=bucket1
then select bucket0 + bucket1
else if parameter1=bucket0 and parameter2=bucket2
then select bucket0 + bucket1 + bucket2
等等?
该表已经存在,因此我对此没有太多控制权。我可以根据需要为函数设置参数。我可以肯定地说,如果需要一组存储桶,中间的任何存储桶都不会被跳过,因此指定开始存储桶和结束存储桶就可以了。我可以有一个逗号分隔的字符串,包含所有想要的存储桶。
【问题讨论】:
-
当您的数据库设计需要时,寻找好的方法不会很有成效。您的存储桶列不应该是单独的列。相反,您应该有两列:
bucket和bucket_id,并有更多行。 -
@trincot 也许是这样,但正如我所说,我无法控制。