Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle 使用一个表格作为另一个表格的参考点';s的计算_Oracle - Fatal编程技术网

Oracle 使用一个表格作为另一个表格的参考点';s的计算

Oracle 使用一个表格作为另一个表格的参考点';s的计算,oracle,Oracle,我希望使用一个表作为另一个表的参考点。表1将设置所有参数,表2包含一个计算所需的值。我正在寻找一种基于日期引用表2的值并将表1的值乘以表2中的值的方法。我希望这个例子能有所帮助 表1 account1 datefrom1 dateto1 value1 1234 01/01/18 12/31/18 5 5678 01/01/17 12/31/17 6 8912

我希望使用一个表作为另一个表的参考点。表1将设置所有参数,表2包含一个计算所需的值。我正在寻找一种基于日期引用表2的值并将表1的值乘以表2中的值的方法。我希望这个例子能有所帮助

表1

 account1      datefrom1      dateto1     value1
    1234          01/01/18     12/31/18     5
    5678          01/01/17     12/31/17     6
    8912          01/03/17     12/31/18     7
    6543          02/01/18     12/31/18     8
表2

 datefrom2      dateto2     value2
    01/01/18      12/31/18       1.02
    01/01/17      12/31/17       1.05
在本例中,我希望1234返回5.1(5*1.02),因为它属于1/1/18-12/31/18范围

我还希望5678返回6.3(6*1.05),因为它属于1/1/17-12/31/17范围

同样的逻辑也适用于8912和6543


我非常感谢您提供的任何帮助

更多的是一个评论,而不是一个答案:如果您只需要关联
dateFrom
dateTo
完全匹配的记录,那么您只需要一个连接:

select t1.account1, t1.datefrom1, t1.dateto1, t1.value1 * t2.value2 as val
from table1 t1
    inner join table2 t2
        on(t1.datefrom1 = t2.datefrom2 and t1.dateto1 = t2.dateto2)
如果您的关系不是那么简单,例如,与日期重叠的记录相关,请添加更多详细信息和更广泛的样本数据集


此外,如果一个表中的记录在另一个表中没有相应的记录,该怎么办?你想得到它吗?如果是,如何计算值?

这是非常简单的示例。范围是否始终与您显示的完全匹配?或者它们可以像2017年7月1日至2018年6月30日那样重叠吗?那么如何计算呢?Datefrom1并不总是与datefrom2相同。我将添加一个示例。在大多数情况下,他们应该这样做,但也会有例外。不会有任何重叠。始终只有一个table2记录匹配,这仍然是一个简单的内部连接。考虑必须满足哪些条件才能找到表1记录的表2记录。表2.datefrom2必须满足哪些条件?表2.dateto2必须满足哪些条件?接受Aleksej的回答,并相应地修改ON子句。我明白了。非常感谢你的帮助。我非常感激。