这是我遇到的问题。
我有三张桌子记录客户访问我的销售中心的日期和地点。一个表是初次访问,第二个是能够重复访问,其中可能有很多,第三个是存款表,存储与人们何时离开存款以及他们离开存款的工作相关的数据。 / p>
所以我需要按星期结束日期对所有这些数据进行排序,我一次只能处理一个表。因此,例如,3月3日访问我的销售中心的任何人都将被计入截至3月9日的一周的流量。
现在我想查询数据,以便我调用其他两个表中的日期,并按周与其他数据一起排序。
所以我的最终输出看起来像这样:
Week ending | initial visit | bback | deposit
3/9/2014 9 3 0
3/16/2104. 12. 0. 1
我的表格结构如下:
Salescenter_clientinfo
Initial_visit (date)
Community
Customer_bback
Bback_date
Bback_community
Customer Deposit
Deposit_date
Doposit_community
所有这些表还有一个字段,即customer_id,它们将它们全部链接起来。
如前所述,我确实有sql工作,可以使用一个表完成工作,但我如何在多个表上完成此工作?
我忘了提一下,我从excel数据透视表对MSSql数据库运行这个sql。我正在使用excel来完成工作,并成为最终报告。
非常感谢任何帮助。 提前谢谢。
史蒂夫
答案 0 :(得分:0)
如果我正确理解您的原始问题,您会尝试在特定的一周内跟踪您所在中心发生的所有事情。因此,如果客户的初次访问是在第1周,并且他/她在第2周回来,则这两个项目将在不同的星期内进行。
基于这个假设,Customer_ID上的链接实际上是一个红色的鲱鱼:您希望按周聚合数据,并且不关心它是否反映了同一个客户的初始访问。
如果是这样,那么以下SQL可能会执行您要查找的内容:
Set Datefirst 1;
SELECT
ISNULL(vc.WeekEnding, ISNULL(b.WeekEnding, d.WeekEnding)) WeekEnding,
vc.InitialVisit,
b.BBack,
d.Deposit
FROM
(
SELECT
DATEADD(dd, 7 - DATEPART(DW, initial_visit), initial_visit) AS WeekEnding,
COUNT(initial_visit) AS InitialVisit
FROM dbo.SalesCenter_clientinfo
GROUP BY DATEADD(dd, 7 - DATEPART(DW, initial_visit), initial_visit)
) vc
FULL OUTER JOIN
(
SELECT
DATEADD(dd, 7 - DATEPART(DW, Bback_date), Bback_date) AS WeekEnding,
COUNT(Bback_date) AS BBack
FROM dbo.Customer_bback
GROUP BY DATEADD(dd, 7 - DATEPART(DW, Bback_date), Bback_date)
) b ON
vc.WeekEnding = b.WeekEnding
FULL OUTER JOIN
(
SELECT
DATEADD(dd, 7 - DATEPART(DW, Deposit_date), Deposit_date) AS WeekEnding,
COUNT(Deposit_date) AS Deposit
FROM dbo.Customer_deposit
GROUP BY DATEADD(dd, 7 - DATEPART(DW, Deposit_date), Deposit_date)
) d ON
vc.WeekEnding = d.WeekEnding