SQL案例,计算2列

时间:2017-02-01 16:17:45

标签: sql oracle alteryx

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

这可行吗?

由于

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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

答案 2 :(得分:0)

对于Alteryx解决方案:(1)将两个表运行到Join工具中,加入Type和State; (2)将输出发送到过滤器工具,强制重量在最小值和最大值之间; (3)将该输出发送到选择工具,在该工具中只捕获所需的特定列; (因为Join将为您提供所有表中的所有列)。完成。

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

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