SQL案例,计算2列
我有一个值表,我需要写一个涉及两列的case语句:下面是示例SQL案例,计算2列,sql,oracle,alteryx,Sql,Oracle,Alteryx,我有一个值表,我需要写一个涉及两列的case语句:下面是示例 Type State Min Max Value A TX 2 15 100 A TX 16 30 200 A TX 31+ 500 假设我有另一张桌子,上面有 Type State Weight Value A TX 14 ? 因此,当我加入表时,我需要一个case语句来查看表2中的权重,类型和状态-将其与表1
Type State Min Max Value
A TX 2 15 100
A TX 16 30 200
A TX 31+ 500
假设我有另一张桌子,上面有
Type State Weight Value
A TX 14 ?
因此,当我加入表时,我需要一个case语句来查看表2中的权重,类型和状态-将其与表1进行比较,知道权重在第1行的2到15之间,并用100更新表2中的值
这可行吗
考虑到第一个表中的
Min
和Max
列属于Integer
类型,谢谢
您需要在范围上使用内部联接
SELECT *
FROM another_table a
JOIN first_table b
ON a.type = b.type
AND a.State = b.State
AND a.Weight BETWEEN b.min AND b.max
如果此值范围内没有行,则返回0
select Type, State, Weight,
(select coalesce(Value, 0)
from table_b
where table_b.Type = table_a.Type
and table_b.State = table_a.State
and table_a.Value between table_b.Min and table_b.Max) as Value
from table_a
对于Alteryx解决方案:(1)将两个表运行到联接工具中,根据类型和状态联接;(2) 将输出发送到过滤器工具,在该工具中,您强制权重介于最小值和最大值之间;(3) 将该输出发送到选择工具,在该工具中,您仅获取所需的特定列;(因为联接将提供所有表中的所有列)。完成了
注意:从联接到筛选器运行的数据可能很大,因为您正在将查找表中的每个类型/状态组合联接到另一个表。根据数据集的大小,这可能会很麻烦。不过Alteryx速度非常快,而且至少我们限制了状态和类型,所以如果您的数据集不是太大,这个简单的解决方案可以很好地工作
对于较大的数据,尝试将其作为原始选择的一部分,利用此处为SQL查询提供的其他解决方案之一。当t2.权重介于t1.Min和t1.Max之间时,则为t1.值,否则考虑到没有
31+
而使用大量的Max
值。这将使始终进行数字比较变得更容易;提出的大多数解决方案似乎都做出了这一假设。