>我有一个值表,我需要写一个涉及 2 列的 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 ?
所以当我加入表格时,我需要一个案例语句来查看表 2 中的权重、类型和状态 - 将其与表 1 进行比较,知道权重从第 1 行落在 2 到 15 之间,并将表 2 中的值更新为 100
这可行吗?
谢谢
如果此值范围内没有行,则返回 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)将该输出发送到选择工具,您可以在其中仅抓取所需的特定列;(因为 Join 将为您提供所有表中的所有列)。做。
注意事项:从联接到筛选器运行的数据可能很大,因为您要将查找表中的每个类型/状态组合联接到另一个表。根据数据集的大小,这可能会很麻烦。不过,Alteryx 非常快,至少我们对状态和类型进行了限制,所以如果你的数据集不是太大,这个简单的解决方案就可以正常工作。
对于较大的数据,请尝试将其作为原始选择的一部分,利用此处为SQL查询提供的其他解决方案之一。
考虑到第一个表中的Min
和Max
列属于Integer
类型
您需要在范围上使用INNER JOIN
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