【发布时间】:2018-09-17 14:51:18
【问题描述】:
从 AdventureWorks 数据库中,我尝试按地区返回每年的总销售额,并包括每个地区有多少销售人员活跃。下面的代码无法按地区分组,而是为每个销售人员创建了一个唯一的行。我的代码缺少什么?
期望的结果
| SalesTerritory | SalesPeople | 2011 | 2012 | 2013 | 2014 |
+----------------+-------------+--------+---------+---------+---------+
| Australia | 1 | NULL | NULL | 184105 | 1237705 |
| Canada | 2 | 115360 | 3426082 | 2568323 | etc... |
代码
SELECT
pvt.SalesTerritory
,COUNT(pvt.SalesPersonID) AS SalesPeople
,pvt.[2011]
,pvt.[2012]
,pvt.[2013]
,pvt.[2014]
FROM (SELECT
st.[Name] AS [SalesTerritory]
,soh.[SalesPersonID]
,soh.[SubTotal]
,YEAR(DATEADD(m, 6, soh.[OrderDate])) AS [FiscalYear]
FROM [Sales].[SalesPerson] sp
INNER JOIN [Sales].[SalesOrderHeader] soh
ON sp.[BusinessEntityID] = soh.[SalesPersonID]
INNER JOIN [Sales].[SalesTerritory] st
ON sp.[TerritoryID] = st.[TerritoryID]
INNER JOIN [HumanResources].[Employee] e
ON soh.[SalesPersonID] = e.[BusinessEntityID]
INNER JOIN [Person].[Person] p
ON p.[BusinessEntityID] = sp.[BusinessEntityID]) AS soh
PIVOT
(
SUM([SubTotal]) FOR [FiscalYear] IN ([2011], [2012], [2013], [2014])
) AS pvt
GROUP BY pvt.SalesTerritory
,[2011]
,[2012]
,[2013]
,[2014];
实际结果
| SalesTerritory | SalesPeople | 2011 | 2012 | 2013 | 2014 |
+----------------+-------------+--------+---------+---------+---------+
| Australia | 1 | NULL | NULL | 184105 | 1237705 |
| Canada | 1 | 9109 | 1254087 | 1179530 | 1166720 |
| Canada | 1 | 106251 | 2171995 | 1388793 | etc... |
【问题讨论】:
标签: sql-server tsql count pivot grouping