根据客户生效日期限制交叉联接中的记录

时间:2015-01-16 19:08:57

标签: sql-server cross-join

在SQL Server 2012中,我想从两个具有历史摘要信息的表中重新创建详细的销售交易记录,但似乎无法根据客户的开始日期限制记录。 (实际上有3个表,一个有客户项目类别和按类别划分的销售额百分比,但我没有遇到交叉连接的那部分问题)。任何帮助,将不胜感激。

想象一下两个表:

Customer
ID  Customername    Sales_Monthly   Date_start
1   Acme            $80,000.00      1/15/2012
2   Universal       $50,000.00      1/3/2013
3   SuperMart       $12,000.00      4/14/2013
Calendar
ID  Date
1   1 /31/2014
2   2 /28/2014
3   3 /31/2014
4   4 /30/2014
5   5 /30/2014
6   6 /30/2014
7   7 /30/2014
8   8 /30/2014
9   9 /30/2014
10  10/30/2014
11  11/30/2014
12  12/30/2014

简单的交叉连接:

SELECT Calendar.Date, Customer.ID, Customer.Customername, Customer.Sales_2013
FROM Calendar, Customer

按照您的预期生成36个条目(3个客户x 12个月)

但是,我只想生成条目28个条目,其中[Calendar.Date]> [Customer.Date_start]

我似乎无法找到WHERE CLAUSE以及任何基于Customer.Date_start字段限制我的记录的连接类型或子查询。对此有何建议?

1 个答案:

答案 0 :(得分:0)

如果您正在加入交叉联接中的某个字段,则它不再是交叉联接。假设您的问题中的客户数据不正确,并且您认为它是2014年的所有客户记录,您可以像这样进行加入。

SELECT *
FROM Customer a
    JOIN Calendar b ON b.Date > a.Date_start 

这产生了33行(客户1为12行,客户2为12行,客户3为9行,而不是像您期望的那样为28行),但希望我的回答能为您指明正确的方向。