Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL案例,计算2列_Sql_Oracle_Alteryx - Fatal编程技术网

SQL案例,计算2列

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

我有一个值表,我需要写一个涉及两列的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之间,并用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
值。这将使始终进行数字比较变得更容易;提出的大多数解决方案似乎都做出了这一假设。