gpt4 book ai didi

SQL 按客户端位置分组

转载 作者:搜寻专家 更新时间:2023-10-30 22:30:02 25 4
gpt4 key购买 nike

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

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 Server 中设置了一个数据库,其中包含过去两年的所有客户订单。有些客户只有一个地点,有些则有多个地点。我想编写一个脚本,显示客户在至少有一个订单的总周数内按地点下的订单数量。

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

  • 客户 ABC 在地点 A 总共 35 周内下了 45 个订单
  • 客户 ABC 在地点 B 总共 15 周内下了 35 个订单
  • 客户 ABC 在地点 C 总共 15 周内下了 15 个订单

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

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

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

关于SQL 按客户端位置分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45599142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com