SQL 按客户位置分组

SQL Group by Client Location

我正在尝试操作的数据示例

Order  | OrderDate | ClientName| ClientAddress |  City  | State|  Zip  |
-------|-----------|-----------|---------------|--------|------|-------|
CO101  | 1/5/2015  | Client ABC| 101 Park Drive| Boston |  MA  | 02134 | 
C0102  | 2/6/2015  | Client ABC| 101 Park Drive| Boston |  MA  | 02134 | 
C0103  | 1/7/2015  | Client ABC| 354 Foo Pkwy  | Dallas |  TX  | 75001 |
C0104  | 3/7/2015  | Client ABC| 354 Foo Pkwy  | Dallas |  TX  | 75001 |
C0105  | 5/7/2015  | Client XYZ| 1 Binary Road | Austin |  TX  | 73301 | 
C0106  | 1/8/2015  | Client XYZ| 1 Binary Road | Austin |  TX  | 73301 | 
C0107  | 7/9/2015  | Client XYZ| 51 Testing Rd | Austin |  TX  | 73301 | 

我在 MS-SQL 服务器中设置了一个数据库,其中包含过去两年的所有客户订单。有些客户只有一个地点,有些则有多个地点。我想编写一个脚本,显示客户在至少有一个订单的总周数内按地点下的订单数量。

根据此脚本的结果,我希望能够推断出每个客户位置的独特订单(在不同时间下达)的摘要。例如:

我想为每个客户的每个唯一位置查看此信息。我不确定如何以这种方式聚合数据。这是我的脚本所在的位置:

SELECT t1.ClientName, (SELECT DISTINCT t2.ClientAddress), COUNT(DISTINCT t2.Orders) AS TotalOrders, 

DATEPART(week, t1.OrderDate) AS Week
FROM database t1 

INNER JOIN database t2 on t1.Orders = t2.Orders

GROUP BY DATEPART(week, t1.OrderDate), t1.ClientAddress, t2.ClientAddress 

HAVING COUNT(DISTINCT t2.SalesOrder) > 1
ORDER BY TotalOrders DESC

我得到的结果按周向我展示了按位置分类的唯一订单,但我不确定如何以我需要的方式计算周数;我曾尝试编写子查询,但我将 运行 放入问题中。我意识到在这个脚本中,我显示了每个星期按位置显示的订单数量,我想计算至少有一个订单的时间范围内的总周数。

结果结构如下:

| ClientName| ClientAddress |  TotalOrders | Week |
|-----------|---------------|--------------|------|
|Client ABC |101 Park Drive |      30      |  21  | 
|Client ABC |101 Park Drive |      29      |  13  | 
|Client ABC |101 Park Drive |      28      |  10  | 
|Client XYZ |1 Binary Road  |      27      |  19  | 
|Client XYZ |1 Binary Road  |      25      |  7   | 
|Client XYZ |51 Testing Rd  |      22      |  9   | 

任何帮助将不胜感激;提前谢谢你。

这不就是你想要的吗?

SELECT t1.ClientName, ClientAddress, COUNT(DISTINCT t1.Orders) AS TotalOrders, 

COUNT(DISTINCT DATEPART(week, t1.OrderDate)) AS Weeks
FROM database t1     

GROUP BY t1.ClientName, t1.ClientAddress

HAVING COUNT(DISTINCT t2.SalesOrder) > 1
ORDER BY TotalOrders DESC

我不太明白你为什么要进行自我加入。对我来说似乎没用,但我把它留在里面,以防万一,并且只关注我为获得您的结果所做的更改。