0

我有一个值表,我需要编写一个涉及 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      ?

因此,当我加入表格时,我需要一个 case 语句来查看表格 2 中的权重、类型和状态 - 将其与表格 1 进行比较,知道权重从第 1 行开始落在 2 到 15 之间,并使用更新表格 2 中的值100

这是可行的吗?

谢谢

4

3 回答 3

0

对于 Alteryx 解决方案:(1) 将两个表运行到连接工具中,连接类型和状态;(2) 将输出发送到过滤器工具,您可以在其中强制权重介于最小值和最大值之间;(3) 将该输出发送到选择工具,在该工具中您只抓取您想要的特定列;(因为 Join 将为您提供所有表中的所有列)。完毕。

注意事项:从 Join 到 Filter 运行的数据可能很大,因为您将 Lookup 表中的每个 Type/State 组合连接到另一个表。根据数据集的大小,这可能很麻烦。Alteryx 非常快,至少我们限制了状态和类型,所以如果你的数据集不是太大,这个简单的解决方案可以正常工作。

对于较大的数据,尝试将其作为原始选择的一部分,利用此处为您的 SQL 查询提供的其他解决方案之一。

于 2017-02-01T17:35:03.287 回答
0

考虑到第一个表中MinMax列是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 
于 2017-02-01T16:21:06.077 回答
0

如果此值范围内没有行,则返回 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
于 2017-02-01T16:21:31.093 回答