我正在阅读MS考试70-461的准备工具包:查询MS SQL Server 2012,作者谈到了PIVOT
运算符。我正在使用AdventureWorks示例数据库进行测试。
我决定做一个简单的测试,看看我是否可以在每个性别(M,F)分割的列上显示每个部门的平均基本费率。
我有以下内容:
WITH CTE AS
(
SELECT
[DepartmentName],
[Gender],
[BaseRate]
FROM
[AdventureWorks].[dbo].[DimEmployee]
)
SELECT
[DepartmentName], [M], [F]
FROM
[AdventureWorks].[dbo].[DimEmployee] PIVOT (Avg(BaseRate) FOR [Gender] IN ([M], [F])) AS P
然而,我注意到了这一点:
[DepartmentName]
上没有任何组(根据本书),因为它是PIVOT
运算符中未指定的唯一字段。
我可以添加一个简单的GROUP BY子句,但我不确定这会产生适当的结果,这也意味着我没有正确理解PIVOT的使用。
知道我哪里错了吗?
答案 0 :(得分:2)
您可以定义CTE但忽略它并从基表中选择。
应该是
WITH CTE
AS (SELECT [DepartmentName],
[Gender],
[BaseRate]
FROM [AdventureWorks].[dbo].[DimEmployee])
SELECT [DepartmentName],
[M],
[F]
FROM CTE PIVOT (Avg(BaseRate) FOR [Gender] IN ([M], [F])) AS P
答案 1 :(得分:0)
怎么样:
SELECT
[DepartmentName], [Gender], [BaseRate]
FROM
[AdventureWorks].[dbo].[DimEmployee] PIVOT (Avg(BaseRate) FOR [Gender] IN ([M], [F])) AS P