SQL Server数据透视表不分组

时间:2013-06-26 04:04:12

标签: sql sql-server sql-server-2012 adventureworks

我正在阅读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的使用。

知道我哪里错了吗?

2 个答案:

答案 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