从3个表中分组数据并按周结束日期排序

时间:2014-04-08 01:16:42

标签: sql date

这是我遇到的问题。

我有三张桌子记录客户访问我的销售中心的日期和地点。一个表是初次访问,第二个是能够重复访问,其中可能有很多,第三个是存款表,存储与人们何时离开存款以及他们离开存款的工作相关的数据。 / 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来完成工作,并成为最终报告。

非常感谢任何帮助。 提前谢谢。

史蒂夫

1 个答案:

答案 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

Fiddle