按客户端位置划分的SQL组
我试图操纵的数据样本按客户端位置划分的SQL组,sql,sql-server,database,sql-server-2012,data-manipulation,Sql,Sql Server,Database,Sql Server 2012,Data Manipulation,我试图操纵的数据样本 Order | OrderDate | ClientName| ClientAddress | City | State| Zip | -------|-----------|-----------|---------------|--------|------|-------| CO101 | 1/5/2015 | Client ABC| 101 Park Drive| Boston | MA | 02134 | C0102 | 2/6/2015
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
我真的不明白你为什么要做自我加入。对我来说似乎没什么用,但我留了下来,以防万一,只关注我为得到你的结果所做的更改。比较复杂的查询,你能给我发一些示例数据表吗,计算不同的周数,而不是按周分组。我试过了,但它没有显示周数的总数。我需要能够计算总金额的订单按客户的位置在多少总周,他们至少有一个订单。我不需要内部连接,我只是想弄清楚如何以我需要的方式获取数据。我不确定是否有必要加入。这怎么不显示总周数?它向您展示了什么?它向我展示了之前的订单总数和每周下订单的结果,除了没有向我展示订单总数的周数之外,它现在只显示了所有行的1。哎呀,我以为我已经从组中减去了周数,但我没有。尝试我当前的编辑。我还删除了self-join以减少混乱。就是这样。非常感谢你!我让事情变得比需要的更复杂。