在QlikView中的日期范围之间的内部连接表

时间:2014-08-27 02:10:11

标签: inner-join qlikview

如何通过QlikView中两个值之间的日期字段完成两个表之间的内连接?

在SQL中,可以使用以下内容:

INNER JOIN TableA ON (TableA.Dates BETWEEN TableB.Start_Date AND TableB.End_Date)

在QlikView中,我有类似的东西:

DatesData:
LOAD * Inline [  
Test_Date 
    11/1/2013 
    12/1/2013  
    1/1/2014  
    2/1/2014  
    3/1/2014  
    4/1/2014  
    5/1/2014  
];

PersonData:
LOAD * Inline [  
ID, Start_Date, End_Date
    1,   12/1/2013, 2/1/2014 
    2,   1/1/2013, 3/1/2014 
    3,   2/1/2014, 4/1/2014  
];

我需要创建一个这样的表:

 ID, Dates
 1, 12/1/2013  
 1, 1/1/2014  
 1, 2/1/2014 
 2, 1/1/2014 
 2, 2/1/2014
 2, 3/1/2014
 etc.....

如何完成这样的联接?

1 个答案:

答案 0 :(得分:1)

答案取决于你的PersonData表中是否有大范围的值,因为如果只有少数几个,如果范围是固定的,你可能会使用if语句。并且不要在重新加载之间进行更改。

然而,对于超过五个条目,这变得不合情理。在这种情况下,在QlikView中有一个名为between的SQL IntervalMatch运算符。它与between的行为略有不同,因为你不能在表达式中调用它,但原则是相同的。

以下脚本使用IntervalMatch通过创建链接表将PersonData中的范围与DatesData中的日期相匹配。 IntervalMatch倾向于在留给自己的设备时创建合成键/表,这就是为什么我们将内部联接与来自DatesData的{​​{1}}中的另一个联接进行跟进(尝试将第二个联接退出并查看如何表格已链接)。

最后,我们放弃PersonData,因为所有必填字段已在PersonData

此方法的唯一副作用是您在主表中有DatesDataStart_Date。但是,您可以通过在脚本中添加End_Date行来快速解决此问题。

DROP FIELDS Start_Date, End_Date