Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按客户端位置划分的SQL组_Sql_Sql Server_Database_Sql Server 2012_Data Manipulation - Fatal编程技术网

按客户端位置划分的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以减少混乱。就是这样。非常感谢你!我让事情变得比需要的更复杂。