SQL 案例,计算 2 列



>我有一个值表,我需要写一个涉及 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查询提供的其他解决方案之一。

考虑到第一个表中的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 

相关内容

  • 没有找到相关文章

最新更新