如何通过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.....
如何完成这样的联接?
答案 0 :(得分:1)
答案取决于你的PersonData
表中是否有大范围的值,因为如果只有少数几个,如果范围是固定的,你可能会使用if
语句。并且不要在重新加载之间进行更改。
然而,对于超过五个条目,这变得不合情理。在这种情况下,在QlikView中有一个名为between
的SQL IntervalMatch
运算符。它与between
的行为略有不同,因为你不能在表达式中调用它,但原则是相同的。
以下脚本使用IntervalMatch
通过创建链接表将PersonData
中的范围与DatesData
中的日期相匹配。 IntervalMatch倾向于在留给自己的设备时创建合成键/表,这就是为什么我们将内部联接与来自DatesData
的{{1}}中的另一个联接进行跟进(尝试将第二个联接退出并查看如何表格已链接)。
最后,我们放弃PersonData
,因为所有必填字段已在PersonData
。
此方法的唯一副作用是您在主表中有DatesData
和Start_Date
。但是,您可以通过在脚本中添加End_Date
行来快速解决此问题。
DROP FIELDS Start_Date, End_Date