我的sql server数据库中有2个表,我想根据它们的日期范围加入。这个数据是保密的,尽管我要发现数据,但我会尽量保持清晰,所以我希望你对此感到满意。
其中一个表表示交易数据,表示将按月开具发票的某个特定对象的使用情况,请参阅下表预览此表
+------------+------------+------------+------------+------------------+
| Object1 ID | Object2 ID | tFrom | tTo | Transaction Cost |
+------------+------------+------------+------------+------------------+
| 54324 | AAA | 01/01/2017 | 01/01/2017 | 15,45 € |
| 54324 | AAA | 02/01/2017 | 02/01/2017 | 20,00 € |
| 54324 | AAA | | 15/01/2017 | 3,00 € |
| 54324 | AAA | | 02/02/2017 | 2,00 € |
| 56767 | BBB | | 12/12/2017 | 1,78 € |
| 34567 | BBB | 02/01/2017 | 02/01/2017 | 40,00 € |
| 34567 | BBB | 04/01/2017 | 04/01/2017 | 30,00 € |
| 34567 | BBB | | 16/01/2017 | 9,00 € |
| 34567 | BBB | 31/01/2017 | 31/01/2017 | 45,00 € |
| 85432 | CCC | 31/12/2016 | 31/12/2016 | 23,00 € |
| 85432 | CCC | 02/01/2017 | 02/01/2017 | 12,00 € |
+------------+------------+------------+------------+------------------+
正如您所看到的,表中有两个对象 - 这是因为要开票的对象的使用取决于另一个对象,并且每月可以对object1和object2进行不同的分配,尽管对象之间的切换并不频繁。
我的维度表,考虑了3种类型的服务(其中一个女巫在上表中表示)并且拥有多个用户维度(我只代表其中的两个,因此表格不会太大)。这个尺寸可以按月变化。请参阅下表的预览:
+--------------+-----------+------------+------------+------------+------------+------------+------------+
| Service Type | Person ID | Dimension1 | Dimension2 | Object1 ID | Object2 ID | dFrom | dTo |
+--------------+-----------+------------+------------+------------+------------+------------+------------+
| Service1 | 1 | wer | errerr | 54324 | AAA | 01/12/2016 | 28/02/2017 |
| Service2 | 1 | wer | errerr | 54324 | AAA | 01/12/2016 | 28/02/2017 |
| Service3 | 1 | wer | errerr | 54324 | AAA | 01/12/2016 | 28/02/2017 |
| Service1 | 2 | qerer | teety | 56767 | BBB | 01/11/2016 | 31/12/2017 |
| Service2 | 2 | qerer | teety | 56767 | BBB | 01/11/2016 | 31/12/2017 |
| Service3 | 2 | qerer | teety | 56767 | BBB | 01/11/2016 | 31/12/2017 |
| Service1 | 3 | ghgh | ryyyrtq | 34567 | BBB | 01/01/2017 | 31/12/2100 |
| Service2 | 3 | ghgh | ryyyrtq | 34567 | BBB | 01/01/2017 | 31/12/2100 |
| Service3 | 3 | ghgh | ryyyrtq | 34567 | BBB | 01/01/2017 | 31/12/2100 |
| Service1 | 4 | tyty | ty | 85432 | CCC | 01/12/2016 | 31/12/2100 |
| Service2 | 4 | tyty | ty | 85432 | CCC | 01/12/2016 | 31/12/2100 |
| Service3 | 4 | tyty | ty | 85432 | CCC | 01/12/2016 | 31/12/2100 |
| Service2 | 5 | gjhh | tytyrtt | 98988 | | 01/12/2016 | 31/12/2100 |
| Service3 | 5 | gjhh | tytyrtt | 98988 | | 01/12/2016 | 31/12/2100 |
+--------------+-----------+------------+------------+------------+------------+------------+------------+
这里的目标是将表1中的成本分配给表2中的每个人,如下所示:
+------------+------------+------------+------------+------------------+-----------+------------+------------+
| Object1 ID | Object2 ID | tFrom | tTo | Transaction Cost | Person ID | Dimension1 | Dimension2 |
+------------+------------+------------+------------+------------------+-----------+------------+------------+
| 54324 | AAA | 01/01/2017 | 01/01/2017 | 15,45 € | 1 | wer | errerr |
| 54324 | AAA | 02/01/2017 | 02/01/2017 | 20,00 € | 1 | wer | errerr |
| 54324 | AAA | | 15/01/2017 | 3,00 € | 1 | wer | errerr |
| 54324 | AAA | 02/02/2017 | | 2,00 € | 1 | wer | errerr |
| 56767 | BBB | | 12/12/2017 | 1,78 € | 2 | qerer | teety |
| 34567 | BBB | 02/01/2017 | 02/01/2017 | 40,00 € | 3 | ghgh | ryyyrtq |
| 34567 | BBB | 04/01/2017 | 04/01/2017 | 30,00 € | 3 | ghgh | ryyyrtq |
| 34567 | BBB | | 16/01/2017 | 9,00 € | 3 | ghgh | ryyyrtq |
| 34567 | BBB | 31/01/2017 | 31/01/2017 | 45,00 € | 3 | ghgh | ryyyrtq |
| 85432 | CCC | 31/12/2016 | 31/12/2016 | 23,00 € | 4 | tyty | ty |
| 85432 | CCC | 02/01/2017 | 02/01/2017 | 12,00 € | 4 | tyty | ty |
+------------+------------+------------+------------+------------------+-----------+------------+------------+
为了尝试自己解决这个问题,我用谷歌搜索了,我发现的最相似的文章是this one,但不幸的是它并不适合我的需要。 我设法基于object1和object2 ID和过滤,维度表,服务类型和日期范围dTo>创建上表的内部联接。 tTo和dFrom< = tTo。从这个内部联接我可以检索到一些不正确的结果,我认为它可能与我定义日期范围过滤器的方式有关。
你们对此有何看法? 我如何加入这些表并产生我在第三个表中显示的结果?
编辑: 我刚刚发现在我的原始表中,在给定的日期中有一些使用object1 ID + Object2 ID标识的事务,这些事务在我的维度表中没有涵盖。示例:假设给定事务对于Object1 ID = 34567并且对象2 ID = BBBB具有tTo = 02-02-2016但是我的维度表具有Object1 ID = 45698并且object2 ID = BBBB dFrom = 10-02-2016且dTo = 05 -06-2016。维度表是一个手动构建在excel文件中的表,我通过SSIS提交给SQL服务器表,它是内部流程成本分配的一部分,非常基础(它所包含的信息并不总是发生的事情。实际上,事务表和维度表之间的匹配必须近似。我已经尝试了这么多个小时,现在已准备好包含所有案例的一些视图,但仍然不成功。我敢肯定这是一个基本的事情我错过了但只是不知道是什么。
感谢您的阅读。 如果您需要更多信息,请告诉我。